SAS FIRST.VARIABLE没有输出

时间:2016-08-12 10:30:11

标签: sas

我有一些SAS代码:

DATA MY_SAMPLE;
    SET SAMPLE;
    BY A;
    IF A = 1 THEN B = 1;
    ELSE IF A ^= 1 THEN B = 0;
    ELSE IF MISSING(A) THEN B = .;
    IF FIRST.A;
RUN;

返回一个带有0个观察值的集合(它不应该这样做)。我已经按A对数据进行了排序,并尝试在应用IF FIRST.A之前将数据读入中间数据集,但得到相同的结果。

我错过了一些完全明显的东西吗?我一直使用FIRST和LAST!

2 个答案:

答案 0 :(得分:2)

同意@Robert,示例代码应该输出记录,假设输入数据中有记录并且已经排序。

我会从您的真实程序/数据中仔细检查日志,并确保没有错误,并且输入数据集有记录。

如果这没有帮助,我会添加一些调试PUT语句,如下所示(未经测试):

DATA MY_SAMPLE;
    SET SAMPLE;
    BY A;

    IF A = 1 THEN B = 1;
    ELSE IF A ^= 1 THEN B = 0;
    ELSE IF MISSING(A) THEN B = .;  *This will never be true ;

    put "Before subsetting if " (_n_ A first.A)(=) ;
    IF FIRST.A;
    put "After subsetting if  " (_n_ A first.A)(=) ;
RUN;

正如罗伯特所指出的那样,写下你的Else if Missing(A)永远不会成真,因为如果A缺失,先前的Else if A ^= 1将评估为真,因为SAS使用二进制逻辑(真/假),而不是三元逻辑(真/假/空)。

另外,我会检查代码中的任何流浪OUTPUT语句。

答案 1 :(得分:0)

检查日志;检查输入;关闭MSSQL;再次打开它,看哪,代码第一次工作。感谢降级,但我没有意识到MSSQL容易出现抽搐!