如何修复SAS中的where子句

时间:2013-08-23 08:42:26

标签: date sas

我有一张桌子是SAS说t看起来像这样

A           B                   C       D
--------------------------------------------------------------
VOLUME      172631922966528     IMPLIED 2012-10-04
VOLUME      173731441803264     IMPLIED 2012-10-04
PRIX_VOLUME 189124634214400     IMPLIED 2012-10-04
PRIX_VOLUME 123153895784448     IMPLIED 2012-10-04
VOLUME      266090408574976     IMPLIED 2012-10-04
VOLUME      119855364243456     IMPLIED 2012-10-04

D列是Date(格式yymmdd10)colume,我有一个值date0的宏变量2012-10-04我正在尝试做一个简单的数据步骤

data test;
    set t (where=(A eq "VOLUME" and D eq &date0.));
run;

但这不起作用

你能帮忙解决一下吗?

1 个答案:

答案 0 :(得分:3)

那是因为当处理宏变量时,你得到:

data test;
    set t (where=(A eq "VOLUME" and D eq 2012-10-04));
run;

哪个SAS将解决为:     数据测试;         set t(where =(A eq“VOLUME”和D eq 1998));     跑; 因为它看数学而不是约会。 您需要向SAS明确说明:
 1.它不是代数。
 2.应将其视为日期。

要将其作为字符串读取,请添加引号。要明确字符串表示日期,请在引号后附加d:

data test;
    set t (where=(A eq "VOLUME" and D eq "&date0."d));
run;

这应该可以解决问题。