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】0による除算【SAS Base Programming対策3】

今回は0による除算(割り算)を解説します。 数学では「0で割れない」とか、極限の単元だと「∞に発散する」とか言われますが、SASで0による除算を行うとどうなるのか触れていきます。 知ってるか知らないか …

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

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

【SAS】ODS PDFは結果内容をPDFファイルとして出力する

今回はPDFについて解説します。 /* pdf */ data data1; Id1=1111; Char1=”AAAA”; output; Id1=2222; Char1=”BBBB”; outpu …

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

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

【SAS】ABORTは実行を強制終了させる

今回はABORTについて解説します。 /*abort*/ data data1; id=”A”; chiku=”SHINJUKU”; output; id=”B”; chiku=”ICHIGAYA”; …