SAS FIRST.VARIABLE不提供输出
我有一些SAS代码,大致如下: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之前将数据读入中间数据集,但得到了相同的结果
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;