4

我正在尝试在 SAS 结构中为金融系统数据构建数据模型。这个想法是将ID作为字符表达式保存在表中,然后从另一个表中为它们proc sql构建一个 -应该以表达式开头。应该是这样的:INNER JOINLIKEIDs'ID%'proc sql

proc sql;
SELECT I.* 
  FORM tableWithIDs X INNER JOIN tableWithData I 
    ON I.ID LIKE X.ID||'%'
;
quit;

不幸的是,它应该是这样的:... LIKE 'X.ID%' 有没有办法在 SAS 代码中构建这样的表达式?

4

2 回答 2

4

如果保存 的值X.ID||'%',您可能会发现它看起来像1 %(对于 id=1)。尝试消除多余的空白,如下所示compressX.ID||'%'

LIKE compress(X.ID || '%')

我假设您的 ID 中没有任何空白字符。

于 2013-01-16T08:55:45.133 回答
4

假设您使用的是版本 9,SAS 解决方案是使用 CATS 函数而不是 || 级联:

like cats(x.ID,'%')

您还有 EQT 运算符,这意味着本质上是“开始于”(截断为相等长度,然后进行比较):

on I.ID eqt x.ID

仅当 x.ID 的长度始终与 I.ID 相同或更长时才有效,因为它将截断更长的那个。如果 I.ID 是较长的字符串,比如 'Member',而 x.ID 是 'Mem',则比较将是有效的,而 LIKE 不会认为它是有效的。

于 2013-01-16T17:49:40.207 回答