数据步骤中的多个SET / MERGE语句

时间:2013-01-28 03:21:11

标签: eclipse sas

    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?

2 个答案:

答案 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;