【问题标题】:Getting rows that contain a value from another table SAS获取包含来自另一个表 SAS 的值的行
【发布时间】:2014-05-08 22:55:05
【问题描述】:

有没有办法从 tbl1 中获取所有行,其中一列包含 tbl2 列中的值之一?

所以可以说 tbl1.col1 是字符串。现在我想要 tbl1 的行,其中 col1 包含(如 SQL 语法中的 x 包含 y)tbl2.col2 的条目之一。

所以我知道您可以通过以下方式获取一个表中出现在另一个表中的所有行 像这样:

proc sql; 
select tbl1.* 
from tbl1, tbl2
where tbl1.id = tbl2.id
;quit;

但是当我尝试时:

proc sql; 
select tbl1.* 
from tbl1, tbl2
where tbl1.id contains tbl2.id
;quit;

我只是得到一张空桌子。

【问题讨论】:

  • Contains 是一个特定的字符串运算符。您还混淆了tb1tbl1。如果您打算使用包含,您可能会进一步解释以确保您清楚 - 我没有清楚地阅读这个问题。
  • 我现在添加了进一步的解释并修复了符号混淆。

标签: sql sas


【解决方案1】:

如果我了解您在做什么,即在 t1 中查找行,其中 t2 中至少有一行使得 t2.id 具有 t1.id 作为子字符串,那么您的问题可能是 t1.id 需要被压缩/修剪。否则,t1.id 将在其实际有用的值填充到完整的字符串长度之后有空格 - 在本例中,即 8 长(以我为 t1 读取它们的方式读取的字符串的默认值)。

data t1;
input id $;
datalines;
123
456
789
;;;;
run;

data t2;
input @1 id $8.;
datalines;
123 456
234 567
;;;
run;

proc sql;
select t1.*
from t1,t2
where t2.id contains compress(t1.id);
quit;

【讨论】:

  • 经过您的澄清后,我认为我的操作与您要求的相反,但转换它应该很容易(在我的示例中,我认为您想要 t2.*)。
  • +1。一般来说,最好使用trim 而不是compress(例如在搜索文本字符串时),因为它会在字符串中保留空格。默认情况下,compress 还会删除空格,这是您想要匹配单词字符串的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多