在SAS中,是否在每次迭代之前将变量始终设置为缺失?

时间:2014-12-30 20:12:52

标签: sas

我很困惑为什么这段代码有效,我担心这是由于对SAS如何处理数据集的误解。我认为PDV初始化为缺少在赋值语句中创建的变量的每次迭代,而所有其他变量都会被每次迭代覆盖。因此,我预计第二次迭代会丢失Promotion,因为没有RETAIN语句。什么时候需要RETAIN语句?为什么不需要它?

DATA work.extended;
    SET Orion.Discount;
    WHERE Month(Start_Date)=7 OR Month(End_Date)=7;
    DROP Unit_Sales_Price;
    Promotion="Happy Holidays";
    Season="Winter";
    Output;
    Season="Summer";
    Output;
    RUN;

以下是输出示例:

Obs Product_ID Start_Date End_Date Discount Promotion Season
1 210100100038 01JUL2007 31JUL2007 60% Happy Holidays Winter
2 210100100038 01JUL2007 31JUL2007 60% Happy Holidays Summer
3 210200100010 01JUL2007 31JUL2007 60% Happy Holidays Winter
4 210200100010 01JUL2007 31JUL2007 60% Happy Holidays Summer

谢谢。

1 个答案:

答案 0 :(得分:4)

您错误地定义了iteration。数据步骤的一次迭代不是一次output,而是从datarun(或return隐含的run一次。 Output与数据步骤迭代无关,而不包括隐含的output

我建议使用数据步调试器(例如here),如果你想看到它的实际效果。