data _null_; set hash.bankholidays; retain total 0; format date :date9.; set hash.oyster; datetime = datepart(datetime); format datetime :date9. ; if date eq datetime then do; total = total + amount; end; put "total =" total; run;
这给了我一个eclipse中的弹出对话框:
Multiple SET/MERGE statements in a data step
我想知道这里发生了什么?似乎是说你不能在set语句中有一个set语句,但我确信我之前已经完成了。
例如。
data data_ex.giftwrap_ribbon_final; set data_ex.giftwrap_w_ribbon_fl; if not missing (first) and not missing (last) then do; do i = first to last; set data_ex.ribbon (keep=ribbon_colour) point = i; output; end; end; else do; ribbon_colour = ''; output; end; run;我可以在这里澄清一下吗?
此外,关于最后一次投入。在set语句完成后如何告诉它执行put?
答案 0 :(得分:1)
您可以使用END =选项(在SET语句中)知道何时在SET语句上执行最后一次观察...但是,您不能将此选项与POINT =选项一起使用
data _null_;
set hash.bankholidays end=first_last;
retain total 0;
format date :date9.;
set hash.oyster end=second_last;
datetime = datepart(datetime);
format datetime :date9. ;
if date eq datetime then do;
total = total + amount; end;
if second_last then put "total =" total;
run;
您绝对可以在DATA STEP中执行多个SET语句...您是否尝试过在SAS产品IDE(EG或PC SAS)中执行此操作而不是Eclipse?
答案 1 :(得分:1)
您需要将set语句包装在do循环中并使用指针。
data _null_;
set hash.bankholidays;
retain total 0;
format date :date9.;
do i = 1 to nobs;
set hash.oyster point = i nobs = nobs;
datetime = datepart(datetime);
format datetime :date9. ;
if date eq datetime then do;
total = total + amount; end;
end;
put "total =" total;
run;