SAS FIRST.VARIABLE不提供输出

SAS FIRST.VARIABLE不提供输出,sas,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之前将数据读入中间数据集,但得到了相同的结果

我有一些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之前将数据读入中间数据集,但得到了相同的结果


我是不是遗漏了一些显而易见的东西?我总是用第一个和最后一个

同意@Robert的说法,假设输入数据中有记录并且已排序,那么示例代码应该输出记录

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

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

正如Robert所指出的,您的
Else if Missing(A)
将永远不会为真,因为如果A缺少前面的
Else if A^=1
将计算为真,因为SAS使用二进制逻辑(真/假),而不是三元逻辑(真/假/空)


此外,我还会检查代码中是否有任何错误的
输出
语句。

检查日志;检查输入;关闭MSSQL;再次打开它,瞧,代码第一次工作了。谢谢你的降级,但我没有意识到MSSQL很容易抽搐

只有当
语句的顺序不正确时,代码才会看起来很好。您确定在
SAMPLE
dataset中有观察结果吗?这不是一个好问题。如果数据步骤返回
0
观察值,则源数据集为空。你应该更加注意你的日志告诉你的事情。
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;