web-dev-qa-db-ja.com

SASでデータセットの空白の観測を削除する方法

データセットからすべての空白の観測を削除したいのですが。私は1つの変数から空白を取り除く方法を知っています:

data a;
set data(where=(var1 ne .)) ;
run;

ここでは、var1の空白なしで新しいデータセットを設定します。しかし、データセット全体の空白をすべて削除したい場合はどうすればよいですか?

ご回答ありがとうございます。

8
user1626092

すべての変数が欠落している行を削除しようとしている場合、それは非常に簡単です。

/* Create an example with some or all columns missing */
data have;
set sashelp.class;
if _N_ in (2,5,8,13) then do;
  call missing(of _numeric_);
end;
if _N_ in (5,6,8,12) then do;
  call missing(of _character_);
end;
run;

/* This is the answer */
data want;
set have;
if compress(cats(of _all_),'.')=' ' then delete;
run;

圧縮の代わりに、事前にOPTIONS MISSING=' ';を使用することもできます。

欠損値のあるすべての行を削除する場合は、NMISS/CMISS関数を使用できます。

data want;
set have;
if nmiss(of _numeric_) > 0 then delete;
run;

または

data want;
set have;
if nmiss(of _numeric_) + cmiss(of _character_) > 0 then delete;
run;

すべてのchar + numeric変数。

15
Joe

あなたはこのようなことをすることができます:

data myData;
set myData;
array a(*) _numeric_;
do i=1 to dim(a);
if a(i) = . then delete;
end;
drop i;

これはすべての数値変数をスキャンし、欠損値を見つけた観​​測を削除します

6
isJustMe

どうぞ。これは、変数が文字または数値であるかどうかに関係なく機能します。

data withBlanks;
input a$ x y z;
datalines;
a 1 2 3
b 1 . 3
c . . 3
 . . .
d . 2 3
e 1 . 3
f 1 2 3
;
run;

%macro removeRowsWithMissingVals(inDsn, outDsn, Exclusion);
/*Inputs: 
        inDsn: Input dataset with some or all columns missing for some or all rows
        outDsn: Output dataset with some or all columns NOT missing for some or all rows
        Exclusion: Should be one of {AND, OR}. AND will only exclude rows if any columns have missing values, OR will exclude only rows where all columns have  missing values
*/
/*get a list of variables in the input dataset along with their types (i.e., whether they are numericor character type)*/
PROC CONTENTS DATA = &inDsn OUT = CONTENTS(keep = name type varnum);
RUN;
/*put each variable with its own comparison string in a seperate macro variable*/
data _null_;
set CONTENTS nobs = num_of_vars end = lastObs;
/*use NE. for numeric cols (type=1) and NE '' for char types*/
if type = 1 then            call symputx(compress("var"!!varnum), compbl(name!!" NE . "));
else        call symputx(compress("var"!!varnum), compbl(name!!" NE ''  "));
/*make a note of no. of variables to check in the dataset*/
if lastObs then call symputx("no_of_obs", _n_);
run;

DATA &outDsn;
set &inDsn;
where
%do i =1 %to &no_of_obs.;
    &&var&i.
        %if &i < &no_of_obs. %then &Exclusion; 
%end;
;
run;

%mend removeRowsWithMissingVals;

%removeRowsWithMissingVals(withBlanks, withOutBlanksAND, AND);
%removeRowsWithMissingVals(withBlanks, withOutBlanksOR, OR);

WithOutBlanksANDのうち:

a   x   y   z
a   1   2   3
f   1   2   3

WithOutBlanksORの出力:

a   x   y   z
a   1   2   3
b   1   .   3
c   .   .   3
e   1   .   3
f   1   2   3
1
user1509107