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】SAS日時値から0埋めの時間表記に変換する方法【TOD】【DATETIME】【PUT】

今回はDATETIMEでSAS日時値を取得した後に、TODを使って0埋めの時間表記に変換する方法について解説していきます。 (PUTの形式変換:【SAS】PUT+DATE,YYMMDDはSAS日付値を …

【SAS】マクロ変数の&&について解説

今回はマクロ変数の&&について解説していきます。 (参考:%PUT 【SAS】%PUTステートメントは文字列をログに出力する。その1 | ビジネスイッチ (how-to-busines …

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

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

【SAS】FORMATプロシージャはフォーマットルールを定義し、値を書き換える。その2

今回もFORMATプロシージャについて解説します。 前回は値の範囲によって、定義されたフォーマットルールに従い、値を書き換えるという内容でした。 【SAS】FORMATプロシージャはフォーマットルール …

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

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