1
    数据_null_;
    设置 hash.bankholidays;

        保留总数 0;
        格式化日期:date9.;

        设置 hash.oyster;
            日期时间 = 日期部分(日期时间);
            格式化日期时间:date9。;

            如果 date eq datetime 则执行;
            总计 = 总计 + 金额;结尾;


    把“总=”总;

    跑;    

这给了我一个 Eclipse 中的弹出对话框: Multiple SET/MERGE statements in a data step

我想知道这里发生了什么?似乎是在说你不能在 set 语句中使用 set 语句,但我确信我以前做过。

例如。

    数据 data_ex.giftwrap_ribbon_final;
    设置 data_ex.giftwrap_w_ribbon_fl;
        如果没有丢失(第一个)并且没有丢失(最后一个)那么做;
            i = 从头到尾;
            设置 data_ex.ribbon (keep=ribbon_colour) 点 = i;
            输出;
            结尾;
        结尾;

        否则做;
        色带颜色 = '';
        输出;
        结尾;
    跑;

我可以在这里澄清一下吗?

另外,关于最后一次。如何告诉它在 set 语句完成后执行 put?

4

2 回答 2

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;    
于 2013-01-29T23:03:25.463 回答
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 中执行此语句?

于 2013-01-28T16:47:06.397 回答