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】SASで良く使うテクニック。その5 「SUM関数」~データセットの差分がいくつあるのか数えたい時~【Excel】

今回はSASで良く使うテクニックということで、データセットの差分がいくつあるのか数えたいときは「SUM関数」が役に立つ理由を解説していきます。 (参考:【SAS】SASで良く使うテクニック。その1 E …

【SAS】SASで良く使うテクニック。その10 「矩形選択」~インデントを入れたい時など~【サクラエディタ】

今回はSASで良く使うテクニックということで、ソースコードにインデントを挿入したい時は、「矩形選択」が役に立つ理由を解説していきます。 「矩形選択」は、インデントの挿入以外にも、同じ文字数分削除をした …

【SAS】サブクエリについて解説

今回はSQLのfrom句にサブクエリを使用した場合の動きについて、解説します。 [from句] まずは通常のSQLプロシージャから。 /* サブクエリ(from句_1) */ data data1; …

WORKライブラリをLIBNAMEで自動的に割り当てる方法を考察【PATHNAME】【%SYSFUNC】

今回はWORKライブラリをLIBNAMEで自動的に割り当てる方法を考察していきたいと思います。 workライブラリはlibnameを使ってlib_1のようにライブラリ名を割り当てる事ができます。 /* …

【SAS】CONTENTSプロシージャはデータセットに関する情報を表示する。

今回はCONTENTSプロシージャについて解説します。  /* data1 */ data data1; Id1=1111; Id2=1111; Id3=1111; output; Id1= …