|
沙发

楼主 |
发表于 2011-1-30 14:21:03
|
只看该作者
Re: 关于如何快速筛选字段
[code:8j7ejj37]data raw;
input id $ var1 $ var2 $;
datalines;
a1 11 12
a2 21 22
;
options nomprint nosymbolgen nomlogic mcompilenote=all;
%macro Benhope(dsname=, firstvar=2, prefix=n_);
%local err libname nvarname;
%let err=0;
%let dsname=%upcase(&dsname);
%let prefix=%upcase(&prefix);
%if %sysfunc(exist(&dsname)) ne 1 %then %do;
%let err=1;
%put WARNING: *** Dataset(&dsname) Not Exist! ***;
%end;
%if &err eq 0 %then %do;
%if %index(&dsname, .) %then %do;
%let libname=%scan(&dsname, 1, .);
%let dsname=%scan(&dsname, 2, .);
%end;
%else %let libname=WORK;
%if %length(&dsname) gt 30 %then %let out_dsname=N_%substr(&dsname, 1, 30);
%else %let out_dsname=N_&dsname;
proc sql;
create table _temp as
select name as varname, type, varnum
from sashelp.vcolumn
where libname="&libname" and memname="&dsname"
and memtype='DATA' and type='char'
order by varnum;
quit;
%let dsid=%sysfunc(open(work._temp));
%let num=%sysfunc(attrn(&dsid, nlobs));
%if &num gt 0 %then %do;
%syscall set(dsid);
data &out_dsname;
set &dsname;
%do i=&firstvar %to #
%let rc=%sysfunc(fetchobs(&dsid, &i));
%if %length(&varname) gt 30 %then %let nvarname=N_%substr(&varname, 1, 30);
%else %let nvarname=N_&varname;
%put NOTE: *** Character Variable (%trim(&varname)) Converted Numeric Variable! ***;
&nvarname=input(&varname, best.);
drop &varname;
rename &nvarname=&varname;
%end;
run;
%end;
%if &dsid gt 0 %then %let rc=%sysfunc(close(&dsid));
proc datasets library=work nolist;
delete _temp;
quit;
%end;
%mend;
%benhope(dsname=raw)[/code:8j7ejj37] |
|