2016-08-12 44 views
-1

我的线沿线的一些SAS代码:SAS FIRST.VARIABLE没有给出输出

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!

+0

代码看起来不错,只有'ELSE IF'语句的顺序不正确。你确定你在'SAMPLE'数据集中有观察吗? –

+0

这不是一个好问题。如果数据步骤返回'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)永远不会是真实的,因为如果是因为SAS使用二进制逻辑(true/false)而不是三元逻辑(true/false/null),因此缺少事先的Else if A ^= 1将评估为true。

此外,我会检查您的代码中的任何杂散OUTPUT声明。

0

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