我很困惑为什么这段代码有效,我担心这是由于对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
谢谢。
答案 0 :(得分:4)
您错误地定义了iteration
。数据步骤的一次迭代不是一次output
,而是从data
到run
(或return
隐含的run
一次。 Output
与数据步骤迭代无关,而不包括隐含的output
。
我建议使用数据步调试器(例如here),如果你想看到它的实际效果。