RETAIN SAS SAS Base Programming

【SAS】オブザベーションを跨いだ計算【RETAIN】【SAS Base Programming対策4】

投稿日:2021年12月23日 更新日:


/* retain */
data data1;
  Id1=1111; Id2=1111; Id3=1111;
    output;
  Id1=2222; Id2=2222; Id3=2222;
    output;
  Id1=3333; Id2=3333; Id3=3333;
    output;
run;

data data2; set data1;
	retain Id4 0;
	Id4 = Id4 + Id3;
run;

  • retainにより、Id4に初期値0を設定できる。
  • Id4 = Id4 + Id3によりレコードの数値を足すことができる。

/* retain null */
data data1;
  Id1=1111; Id2=1111; Id3=1111;
    output;
  Id1=2222; Id2=2222; Id3=.;
    output;
  Id1=3333; Id2=3333; Id3=3333;
    output;
run;

data data2; set data1;
	retain Id4 0;
	Id4 = Id4 + Id3;
run;

  • retainにより、Id4に初期値0を設定できる。
  • Id4 = Id4 + Id3によりレコードの数値を足すことができる。
  • nullは正しく計算されない。

/* Id4 + Id3; */
data data1;
  Id1=1111; Id2=1111; Id3=1111;
    output;
  Id1=2222; Id2=2222; Id3=2222;
    output;
  Id1=3333; Id2=3333; Id3=3333;
    output;
run;

data data2; set data1;
	Id4 + Id3;
run;

  • Id4 = Id4 + Id3とほぼ同じ動き。
  • Id4 + Id3によりレコードの数値を足すことができる。
  • 最初のId4には0が設定される。(?)

/* Id4 + Id3; null */
data data1;
  Id1=1111; Id2=1111; Id3=1111;
    output;
  Id1=2222; Id2=2222; Id3=.;
    output;
  Id1=3333; Id2=3333; Id3=3333;
    output;
run;

data data2; set data1;
	Id4 + Id3;
run;

  • Id4 = Id4 + Id3とほぼ同じ動き。
  • Id4 + Id3によりレコードの数値を足すことができる。
  • 最初のId4には0が設定される。(?)
  • nullが有っても正しく計算される。

/* Id4 = Id4 + Id3 */
data data1;
  Id1=1111; Id2=1111; Id3=1111;
    output;
  Id1=2222; Id2=2222; Id3=2222;
    output;
  Id1=3333; Id2=3333; Id3=3333;
    output;
run;

data data2; set data1;
	Id4 = Id4 + Id3;
run;

  • Id4 = Id4 + Id3でレコードの数値を足そうとしている。
  • Id4の初期値はnull(?)
  • nullがあると正しく計算されない。

/* Id4 = Id4 + Id3; null */
data data1;
  Id1=1111; Id2=1111; Id3=1111;
    output;
  Id1=2222; Id2=2222; Id3=.;
    output;
  Id1=3333; Id2=3333; Id3=3333;
    output;
run;

data data2; set data1;
	Id4 = Id4 + Id3;
run;

  • Id4 = Id4 + Id3でレコードの数値を足そうとしている。
  • Id4の初期値はnull(?)
  • nullがあると正しく計算されない。

/* retain Id4 + Id3; */
data data1;
  Id1=1111; Id2=1111; Id3=1111;
    output;
  Id1=2222; Id2=2222; Id3=2222;
    output;
  Id1=3333; Id2=3333; Id3=3333;
    output;
run;

data data2; set data1;
	retain Id4 0;
	Id4 + Id3;
run;

  • Id4に初期値0を設定。
  • Id4 + Id3によりレコードの数値を足すことができる。
  • Id4 = Id4 + Id3とほぼ同じ動き。

/* retain Id4 + Id3 null */
data data1;
  Id1=1111; Id2=1111; Id3=1111;
    output;
  Id1=2222; Id2=2222; Id3=.;
    output;
  Id1=3333; Id2=3333; Id3=3333;
    output;
run;

data data2; set data1;
	retain Id4 0;
	Id4 + Id3;
run;

  • Id4に初期値0を設定。
  • Id4 + Id3によりレコードの数値を足すことができる。
  • Id4 = Id4 + Id3とほぼ同じ動き。
  • nullが有っても正しく計算される。

/* retain 1 */
data data1;
  Id1=1111; Id2=1111; Id3=1111;
    output;
  Id1=2222; Id2=2222; Id3=2222;
    output;
  Id1=3333; Id2=3333; Id3=3333;
    output;
run;

data data2; set data1;
	retain Id4 1;
	Id4 = Id4 + Id3;
run;

  • retainにより、Id4に初期値1を設定。
  • Id4 = Id4 + Id3によりレコードの数値を足すことができる。

-RETAIN, SAS, SAS Base Programming

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【SAS】ATTRIBとRENAMEを同時に使うときの注意点

今回はATTRIBとRENAMEを同時に使うときに注意するべきポイントについて解説していきます。 SAS日付となっているid1をddMONyyyy形式にして、id4とするケースを仮定します。 結論:A …

【SAS】OUTPUTとDELETEの「明示的な使い方」「暗黙的な使い方」

今回はOUTPUTとDELETEにスポットを当てていきたいと思います。 /* output, delete無し */ data data1; Id1=1111; Char1=”AAAA”; outpu …

【SAS】FREQプロシージャは頻度集計とクロス集計をする

今回はFREQプロシージャについて解説します。 /* freq 頻度集計 */ data data1; 番号=”AAAAAA”; コード=”02″; 金額=1999; output; 番号=”AAAA …

【SAS】%SYSFUNC関数はデータステップの外でも関数を使えるようにする。その2(%LETステートメント中の挙動)

今回は%SYSFUNC関数について、%LETステートメント中の挙動に着目して解説します。 /* substr */ %let a = substr(123456789, 2, 4); data dat …

【SAS】PRINTプロシージャは入力データセットの中身を結果に表示する【obs=】

今回はPRINTプロシージャについて解説します。 /* print */ data data1; 番号=”AAAAAA”; コード=”02″; 金額=1999; output; 番号=”AAAAAA” …