0

我有一张桌子是 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)列,我有一个宏变量date0,值得2012-10-04我尝试做一个微不足道的数据步骤

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

但这不起作用

你能帮忙修一下吗?

4

1 回答 1

3

那是因为在处理宏变量时,您会得到:

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

哪个 SAS 将解析为:数据测试;设置 t (where=(A eq "VOLUME" and D eq 1998)); 跑; 因为它看到的是数学而不是日期。您需要向 SAS 说明:
1. 它不是代数。
2. 它应该读作日期。

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

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

这应该够了吧。

于 2013-08-23T09:32:35.417 回答