DELETE OUTPUT SAS

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

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

今回はOUTPUTとDELETEにスポットを当てていきたいと思います。


/* output, delete無し */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
run;

  • データステップで中身に処理が記述されていない場合は全て出力される。(暗黙的にoutputした)

/* if Id1=1111 then output; */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111 then output;
run;

  • if文で一部にoutputが為されるとき、他のオブザベーションは出力されない。

/* if Id1=1111 then Char1="aaaa"; */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111 then Char1="aaaa";
run;


  • if文で代入処理されるとき、全てのオブザベーションは出力される。

/* 
  if Id1=1111 then output;
  if Char1="DDDD";
 */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111 then output;
  if Char1="DDDD";
run;

  • if文で一部にoutputされるとき、2つ目のif文で暗黙的outputは実行されない。

/* if Id1=1111 then delete; */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111 then delete;
run;

  • if文でdelete処理が実行されるとき、他のオブザベーションは出力される。

/* 
  if Id1=1111 then delete;
  if Char1="DDDD";
 */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111 then delete;
  if Char1="DDDD";
run;

  • if文で一部にdeleteが実行されるとき、2つ目のif文で暗黙的outputも実行される。

/* 
  if Id1=1111 then output;
  output;
 */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111 then output;
  output;
run;


  • if文で一部にoutputが実行されるとき、通常outputも実行される。

/* 
  if Id1=1111;
  output;
 */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111;
  output;
run;

  • サブセットifによりoutputが実行される。

/* 
  if Id1 ^= .;
  if Id1 = 1111;
 */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1 ^= .;
  if Id1 = 1111;
run;

  • 1つ目のif文で真であるレコードが、2つ目のif文で暗黙的outputが実行される。(サブセットif)

/* 
  if Id1=1111 then delete;
  if Id1=1111 then output;
 */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111 then delete;
  if Id1=1111 then output;
run;

  • 1つ目のif文でdelete、2つ目のif文でoutputを記載した場合、出力は0オブザベーション(⇒Id1=1111ではdeleteされ、それ以外は素通りされている?)

/* 
  if Id1=1111 then delete;
  if Id1=1111 then output;
 */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111 then delete;
  if Id1=1111 then output;
  output;
run;

  • 1つ目のif文でdelete、2つ目のif文でoutputを記載した場合、先ほどは0オブザベーションだったが、今回はoutputを加えたため、3件出力となった。

/* 
  if Id1=1111 then delete;
  output;
 */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111 then delete;
  output;
run;

  • 1つ目のif文でId1=1111;はdelete、それ以外はoutputを通るため、出力は3件となった。

/* 
  if Id1=1111 then output;
  if Id1=1111 then delete;
 */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111 then output;
  if Id1=1111 then delete;
run;

  • 1つ目のif文でoutputが実行されると、そのオブザベーションは出力されるため、それ以降の処理は実行されない。
  • Id1=1111;はoutputされてdeleteされない。

/* 
  if Id1=1111;
  if Id1=2222 then output;
 */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111;
  if Id1=2222 then output;
run;

  • サブセットifのため、output処理が通らず0オブザベーションとなった。

/* 
  if Id1=1111;
  if Id1=1111 then delete;
 */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111;
  if Id1=1111 then delete;
run;

  • サブセットif
  • Id1=1111;はdeleteされる。
  • それ以外は出力されない。

/* 
  if Id1=1111 then delete;
  if Id1=2222 then delete;
 */
data data1;
  Id1=1111; Char1="AAAA";
    output;
  Id1=2222; Char1="BBBB";
    output;
  Id1=3333; Char1="CCCC";
    output;
  Id1=4444; Char1="DDDD";
    output;
run;

data data2;set data1;
  if Id1=1111 then delete;
  if Id1=2222 then delete;
run;

  • if文でdeleteされるとき、他のオブザベーションは出力される。

-DELETE, OUTPUT, SAS

執筆者:


comment

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

関連記事

【SAS】INDEXC関数は文字列から特定の文字を探して位置を返す。

今回はINDEXC関数について解説します。 data data1; Id1=”1111″; Id2=”1111″; Id3=”1111″; output; Id1=”2111″; Id2=”2111″ …

【SAS】SASで良く使うテクニック。その7 「条件付き書式」~差分があるセルに色を付けたい時~【Excel】

今回はSASで良く使うテクニックということで、データセットのコンペアにおいて、差分があるセルに色を付けたい時ときは「条件付き書式」が役に立つ理由を解説していきます。 (参考:【SAS】SASで良く使う …

【SAS】SORTプロシージャはBYで指定した変数で並べ替える その2 降順

今回はSORTプロシージャの降順について解説します。(前回:【SAS】SORTプロシージャはBYで指定した変数で並べ替える その1 昇順 | ビジネスイッチ (how-to-business.com) …

【SAS】DATASETSプロシージャを使ってデータセットを削除する。【DELETE】

今回はDATASETSプロシージャを使ってデータセットを削除する方法について解説します。  /* delete; */ data data1; id1=”1111″; id2=”1111″; …

【SAS】SAS Studioのフィルター機能の使い方を解説 その2 ~数値型~

今回もSAS Studioのフィルター機能について解説します。(前回:【SAS】SAS Studioのフィルター機能の使い方を解説 その1 ~文字型~ | ビジネスイッチ (how-to-busine …