2016-12-22 3 views
0

私のユーザ定義ライブラリYYMMDD10. formatを持つDMデータセットからのすべての日付列BRTHDTC DMDTC RFENDTC RFSTDTCの観測を削除しようとしています。特定のフォーマットの日付列観測を削除する

proc sql noprint; 
    select distinct catx(".",libname,memname), name into :dtelist separated by " ", :dtevars separated by " " 
    from dictionary.columns 
    where libname = upcase("Dtelib") and format =('YYMMDD10.'); 
quit; 

data drpdte(Keep=&dtevars); 
set &dtelist; 
if &dtevars =('&dtevars'd,YYMMDD10.) then delete; 
run; 

しかし、複数の引数のエラーを返します。何か助けに感謝します。

+0

DELETEステートメントは変数ではなく、観測値を削除します。代わりにDROP文を生成することを意味しましたか? – Tom

+0

@Tom yymmdd10を持つ列を削除したい。 format私のデータからその列を削除したい。私の場合は、これらの列「BRTHDTC DMDTC RFENDTC RFSTDTC」を私のDSから削除する必要があります。 – user7108488

答えて

2

以下はあなたに適しています。私はproc contentsを出力してからフォーマット変数を組み合わせて、すべての変数とそのフォーマットのリストを得ます。次に、これをマクロに入れて、dropステートメントで使用することができます。

** test data **; 
data test; 
    bad_date = "05OCT2016"D; 
    good_date = "12DEC2016"D; 
    good_date1 = "22DEC2016"D; 
    car = "Ford"; 
    model = "F-150"; 
    format bad_date yymmdd10. good_date yymmdd9. good_date1 date10.; 
run; 

** view list of variables and their formats **; 
proc contents data = test noprint out=names; run; 

** string together format and length to view YYMMDD10 **; 
data names1; set names; 
    new_format = compress(catx("",format,formatl)); 
    keep name new_format; 
run; 

** put the YYMMDD10 vars into a macro variable **; 
proc sql noprint; 
    select name 
    into: dropvars separated by " " 
    from names1 
    where new_format = "YYMMDD10"; 
quit; 

%put &dropvars.; 

data test1; set test (drop=&dropvars.); run; 
関連する問題