我有中的每一個大約20日期字段30的數據集,其中所述可變型字符和數字之間之間以及日期和日期時間格式,即在下列情況下發生變化。 ..轉換字符變量到數字日期
一)數字 - 日期 二)數字 - 日期時間 C)字符。 - 日期 d)字符 - 日期時間
我想每一個人領域的數字和date9轉換。格式。我試着寫了下面的宏不產生正確的結果時,這個變量是一個字符串。出了什麼問題? ... SAS似乎並沒有正確地解釋輸入語句,如果沒有正確指定字符變量的日期格式爲。
%macro converttodate(inlib,indata,outlib,outdata,invar,outvar);
ods listing close;
ods output dataset.variables = work.formats;
proc contents data = &inlib..&indata.;
run;
data work.formats;
set work.formats;
where lowcase(compress(variable)) = lowcase(compress("&invar."));
run;
data _NULL_;
set work.formats;
call symput('dtype',compress(lowcase(type)));
call symput('dformat',compress(lowcase(format)));
call symput('dlen',compress(put(len,8.)));
run;
%PUT INVAR = ** &invar. ** OUTVAR = ** &outvar. **;
%PUT TYPE = ** &dtype. **;
%PUT FORMAT = ** &dformat. **;
%PUT LENGTH = ** &dlen. **;
%if &dtype. = num %then %do;
data &outlib..&outdata.;
length tmp_put $50;
set &inlib..&indata.;
format &outvar. date9.;
tmp_put = compress(put(&invar.,&dformat.));
if index(tmp_put,':') > 0 then &outvar. = datepart(&invar.);
else &outvar. = &invar.;
drop tmp_put;
run;
%end;
%else %do;
data &outlib..&outdata.;
set &inlib..&indata.;
format &outvar. date9.;
if index(&invar.,':') > 0 then &outvar. = datepart(input(&invar.,datetime.));
else &outvar. = input(&invar.,date.);
run;
%end;
%mend;
例如,
data work.test;
format x1 date9. y1 datetime30.6;
x1 = mdy(10,16,1922);
x2 = put(x1,date9.);
y1 = 100000;
y2 = put(y1,datetime30.6);
run;
%converttodate(
inlib = work,
indata = test,
outlib = work,
outdata = test,
invar = x2,
outvar = x2_out);
一些樣品投入? – usr2564301
如果你運行上面的代碼x2_out將成爲代替「16OCT1922」 16OCT2019「。 – user1568780