【问题标题】:How can I fix my where clause in SAS如何修复 SAS 中的 where 子句
【发布时间】:2013-08-23 08:42:25
【问题描述】:

我有一张桌子是 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;

但这不起作用

你能帮忙解决吗?

【问题讨论】:

    标签: date sas


    【解决方案1】:

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

    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. 它应该读作日期。

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

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

    这应该可以解决问题。

    【讨论】:

    • 事实上,如果宏变量是 2012-10-04 下的数字,它就可以解决问题......如果它仍然是 2012-10-04 则不会,但它对我来说已经足够了
    猜你喜欢
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多