1
    データ_null_;
    hash.bankholidaysを設定します。

        合計0を保持します。
        フォーマット日付:date9 .;

        hash.oysterを設定します。
            datetime = datepart(datetime);
            format datetime:date9。;

            date eq datetimeの場合、実行します。
            合計=合計+金額; 終わり;


    put "total =" total;

    走る;    

これにより、Eclipseのポップアップダイアログボックスが表示されます。 Multiple SET/MERGE statements in a data step

ここで何が起こっているのだろうか?setステートメント内にsetステートメントを含めることはできないと言っているようですが、私は以前にそれを行ったことがあると確信しています。

例えば。

    データdata_ex.giftwrap_ribbon_final;
    set data_ex.giftwrap_w_ribbon_fl;
        欠落していない場合(最初)および欠落していない場合(最後)、実行します。
            doi=最初から最後まで;
            set data_ex.ribbon(keep = ribbon_colour)point = i;
            出力;
            終わり;
        終わり;

        それ以外の場合;
        Ribbon_colour ='';
        出力;
        終わり;
    走る;

ここでいくつかの説明を得ることができますか?

また、その最後のプットについて。setステートメントが終了した後にputを実行するように指示するにはどうすればよいですか?

4

2 に答える 2

1

(SETステートメントの)END =オプションを使用すると、 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ステートメントを絶対に実行できます...これをEclipseではなくSAS製品IDE(EGまたはPC SAS)で実行してみましたか?

于 2013-01-28T16:47:06.397 に答える
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 に答える