FIRST, LAST NODUPKEY SAS SORT

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

投稿日:

今回はfirst, last↔SORT NODUPKEYの変換について解説します。

結論を先に書くと、変換できる場合、変換できない場合とがあります。


/*sort1*/
data data1;
  id1="1111"; id2="1111";
    output;
  id1="1111"; id2="2222";
    output;
  id1="1111"; id2="3333";
    output;
  id1="2222"; id2="3333";
    output;
  id1="2222"; id2="2222";
    output;
  id1="2222"; id2="1111";
    output;
  id1="3333"; id2="2222";
    output;
  id1="3333"; id2="1111";
    output;
  id1="3333"; id2="3333";
    output;
run;



proc sort data=data1 out=data2 ; by id1 id2 ; run;


data data3; set data2; by id1 id2;
  if first.id2 = 1;
run;

ソート⇒ユニークをnodupkeyで表すと、


/* nodupkey1 */
proc sort nodupkey data=data1 out=data3 ; by id1 id2 ; run;


このようにソート⇒ユニークの流れはnodupkeyで書き表すことができます。

続いて、sort2


/*sort2*/
data data1;
  id1="1111"; id2="1111";
    output;
  id1="1111"; id2="2222";
    output;
  id1="1111"; id2="3333";
    output;
  id1="2222"; id2="3333";
    output;
  id1="2222"; id2="2222";
    output;
  id1="2222"; id2="1111";
    output;
  id1="3333"; id2="2222";
    output;
  id1="3333"; id2="1111";
    output;
  id1="3333"; id2="3333";
    output;
run;



proc sort data=data1 out=data2 ; by id1 id2 ; run;


data data3; set data2; by id1 id2;
  if first.id1 = 1;
run;

このソート⇒ユニークの流れをnodupkeyで書き表そうとすると、


/* nodupkey2_1 */
proc sort nodupkey data=data1 out=data3 ; by id1 id2 ; run;


上記のnodupkey2_1では不適切なことが分かります。


/* nodupkey2_2 */
proc sort nodupkey data=data1 out=data3 ; by id1  ; run;

nodupkey2_2でも無いことが分かります。


/* nodupkey2_3 */
proc sort nodupkey data=data1 out=data3 ; by id2  ; run;

nodupkey2_3でも無いことが分かります。


/* nodupkey2_4 */
proc sort nodupkey data=data1 out=data3 ; by descending id1  ; run;

nodupkey2_4でも無いことが分かります。


/* nodupkey2_5 */
proc sort nodupkey data=data1 out=data3 ; by descending id2  ; run;

nodupkey2_5でも無いことが分かります。

まとめると、ソートキーとユニークキーが同一の場合は変換できます。

異なる場合は変換できない場合があります。

-FIRST, LAST, NODUPKEY, SAS, SORT

執筆者:


comment

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

関連記事

【SAS】IFステートメントは処理を分岐できる。その1

今回はSASのif文について解説していきたいと思います。 【IF文の関連記事】 (明示的、暗黙的OUTPUT:【SAS】OUTPUTとDELETEの「明示的な使い方」「暗黙的な使い方」 | ビジネスイ …

【SAS】SAS日時値からSAS日付値に変換する方法【DATEPART】【DATETIME】【DATE】

今回はDATETIMEでSAS日時値を取得した後、SAS日付値に変換する方法について解説していきます。 (つまり、DATETIMEの値からDATEの値に変換する) (DATETIME:【SAS】DAT …

【SAS】%MACROはマクロを定義することができる。その3 マクロには引数を設定できる。【%MEND】

今回はマクロに引数を設定する方法について解説していきたいと思います。(事前に読んでおきたい記事:【SAS】%MACROはマクロを定義することができる。【%MEND】 | ビジネスイッチ (how-to …

【SAS】SUMは足し算をする。その2【要約関数】【SQL】

今回もSQLのSUM(要約関数)について解説します。 過去記事でも、SQLのSUM関数について取り上げました。【SAS】SUMは足し算をする。その1【SQL】 | ビジネスイッチ (how-to-bu …

【SAS】CALL SYMPUTは関数を用いてマクロ変数の代入ができる。

今回はCALL SYMPUTについて解説します。 /*その1*/ data data1; kyo = today(); run; today()は本日の日付をSAS日付で取得する。 /*その2*/ d …