2016-08-11 14 views
0

SAS Proc SQLを使用して、すべての列の値が欠損していないテーブルで私の行を探したいと思います。すべての列名を列挙することなくこれを行う方法はありますか?これはうまくいきませんでしたが、意図した出力が何であるかを知ることができます。SAS Proc SQLを使用して、すべての列が見つからない行を検索しますか?

Proc SQL; 
    Select * 
    from work.table 
    Where * is not null; 
Run; 

可能であれば、結果を1つの観察に限定したいと思います。ありがとう。

答えて

0

あなたはマクロ言語を使用せずに一つの項目内のすべての変数を取得することができないので。 datastepでは、これは簡単です。

data class; 
    set sashelp.class; 
    if mod(_n_,3)=1 then call missing(age); 
run; 

data want; 
    set class; 
    if cmiss(of _all_)=0; 
run; 

cmiss文字や数値変数が欠けて(具体的にこの場合missingsの総数をカウント)されている場合1を示しています。データステップでobs=1オプションを使用すると、1に制限できます。

+0

これは働いていました!ありがとうございました。将来Joeのコードを使いたい人のために、欠損していないすべての値を持つ行を取得するには、0の代わりにif cmiss(_all_の)を1に変更してください。 –

+0

なぜ1に変更しますか?つまり、値が1つ*欠けている行を探します。すべての虚偽は0になります。 – Joe

+0

あなたは正しいです。元々、cmiss = 0は結果を返しませんでしたが、すべての行に欠損値がある元の表に列があることが分かりました。その列を削除すると、はい、cmiss = 0が正しいことになります。ありがとう。 –

0

SQLでは、明示的にする必要があります。 *は、列を展開する汎用マクロではありません。これは、select *count(*)で使用される文法要素です。

ので、このような何か:SQLで単純ではない

Proc SQL; 
    Select * 
    from work.table 
    Where col1 is not null and col2 is not null and col3 is not null . . . 
Run; 
1

使用してSQLおよびディクショナリ表は:

proc sql noprint; 
    select cats('not missing(', name, ')') 
    into :expression separated by " and " 
    from dictionary.columns 
    where libname = "SASHELP" and memname = "CLASS"; 
quit; 

proc sql outobs=1; 
    select * 
    from sashelp.class 
    where &expression.; 
quit; 
関連する問題