尽管条件得到满足,SAS仍未达到条件条款

时间:2014-12-09 22:02:19

标签: sas

这是我与SAS的第一天。

我使用以下代码尝试创建一个标志,该标志标识我的数据集的行何时具有字段a(字符)与上一行中的相应字段保持相同的属性,以及字段b(字符)与上一行的相应字段不同:

DATA WORK.temp1; 
SET WORK.temp2;

RETAIN PREV_a
            PREV_b;

IF( (PREV_a = a) AND (PREV_b NE b)) THEN DO; 
    FLAG = "Y";
    END;
ELSE 
    FLAG = "N";


PREV_a = a;
PREV_b = b;
RUN;

结果是该标志总是具有值" N",即使在它应具有值" Y"的情况下。我在一个数据集上测试了代码,我在前面的DATA步骤中手动构建了它,并且它在那里工作,因此我确信逻辑和语法都可以(毕竟,这非常简单)。

因此,我得出结论,我缺乏一些特殊的SAS知识,这解释了为什么在项目流程中从前一个节点设置DATA的情况下,这可能不起作用。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

对我来说很好看。在下面的测试数据中,只有行D将标志设置为“Y”。您期望输出是什么?

一些测试数据:

data temp2;
  input row $ a b;
datalines;
a 1 2
b 2 3
c 3 4
d 3 5
e 3 5 
f 4 5
g 5 6
h 7 8
i 7 8
;
run;

你的代码(注意 - 在最终分配prev_a和prev_b之前,我添加了一个output语句来明确地将变量的内容写入数据集。这样可以更容易地看到发生了什么if语句:

DATA WORK.temp1; 
SET WORK.temp2;

RETAIN PREV_a
            PREV_b;

IF( (PREV_a = a) AND (PREV_b NE b)) THEN DO; 
    FLAG = "Y";
    END;
ELSE 
    FLAG = "N";
output; /* ADDED */

PREV_a = a;
PREV_b = b;
RUN;