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】PRINTプロシージャは入力データセットの中身を結果に表示する【obs=】

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

【SAS】FIRST, LAST↔SORT NODUPKEYの変換

今回はfirst, last↔SORT NODUPKEYの変換について解説します。 結論を先に書くと、変換できる場合、変換できない場合とがあります。 /*sort1*/ data dat …

【SAS】YYYY-MM表記にする方法【SUBSTR】【||】

今回はYYYYMMDD表記の年月日をYYYY-MM表記にしたいと思います。 結論:SUBSTRと||を使います。 (SUBSTR:【SAS】SUBSTR関数は文字列から指定した文字数分切り取る。 | …

【SAS】LIBNAMEステートメントはExcelファイルをライブラリとして割り当てることができる。【SAS Base Programming対策5】

今回はLIBNAMEステートメントを用いてExcelファイルをライブラリ参照する方法について触れていきます。 SAS Base Programmingの試験を2回受験しましたが、2回ともExcelファ …

【SAS】%SYSFUNC関数はデータステップの外でも関数を使えるようにする。

今回は%SYSFUNC関数について解説します。 /* sysfunc_1 */ %put %sysfunc(substr(123456789, 2, 4)); %sysfuncにより、関数をデータステ …