今回は、データセットのオブザベーション数により、処理を分岐させる方法について解説していきたいと思います。
(参考:【SAS】データセットの有無で処理を分岐させる方法【%IF】【EXIST】 | ビジネスイッチ (how-to-business.com))
/* 1オブザベーション*/
data data1;
id1 = "1111";
run;
data data2; set data1;
if id1 = "1111" then output;
run;
data data3;
if NOBS = 0 then do;
id1 = "blank";
output;
end;
set data2 nobs=NOBS;
output;
run;



- nobs=NOBSにより、オブザベーション数「1」をNOBSに格納。
- NOBS=1なので、何もせずid1を出力。
/* 0オブザベーション*/
data data1;
id1 = "1111";
run;
data data2; set data1;
if id1 = "2222" then output;
run;
data data3;
if NOBS = 0 then do;
id1 = "blank";
output;
end;
set data2 nobs=NOBS;
output;
run;



- nobs=NOBSにより、オブザベーション数「0」をNOBSに格納。
- NOBS=0なので、id1=”blank”
/* 空の1オブザベーション */
data data2;
attrib id1 length=$5.;
run;
data data3;
if NOBS = 0 then do;
id1 = "blank";
output;
end;
set data2 nobs=NOBS;
output;
run;


- attribを使うと空の1オブザベーションとなってしまう為、注意。
- nobs=NOBSにより、オブザベーション数「1」をNOBSに格納。
- NOBS=1なので、何もせずid1を出力。