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】LIBNAMEはディレクトリパスをライブラリに割り当てる

今回はLIBNAMEについて解説します。 ちなみにSAS Base Programmingでは、LIBNAMEができないと前半の記述問題が解けません。(データセットが与えられるので、割り当てられないと …

【SAS】PUTN関数は数値に対して出力形式を指定して変換する。

今回はPUTN関数について解説します。 /* putn_point. */ proc format; value point 1-50=’Low’ 51-100=’High’; run; data d …

【SAS】NODUPはソート時に全ての変数における重複を削除する

今回はNODUPについて解説します。 前回NODUPKEYについて解説しました。 【SAS】NODUPKEYはソート時に重複を削除する 今回のNODUPは前回の文法の亜種という感じです。 /*nodu …

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

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

【SAS】INTNX関数は指定期間の条件を満たす日付けを返す。その2

今回はINTNX関数について追加で解説します。 過去記事では INTNX関数 の使い方(引数3つ)について解説しました。⇒【SAS】INTNX関数は指定期間の条件を満たす日付けを返す。 | ビジネスイ …