这个Macro应该可以解决你的问题
%macro fwords04(string=,
root=,
delim=,
vnwords=nwords);
%put ARROW SYSTEM MACRO FWORDS04: Separate a string into words.;
%global &vnwords;
%local count word spac;
%let count=1;
%if "&delim" ne ""
%then %let spac=%str(&delim);
%else %let spac=%str( );;
%let word=%qscan(&string,&count,&spac);
%do %while (&word ne);
%global &root&count;
%let &root&count=&word;
%let count=%eval(&count+1);
%let word=%qscan(&string,&count,&spac);
%end;
%let &vnwords=%eval(&count-1);
%mend fwords04;
%macro setdata(inds=, outds=);
%fwords04(string=&inds, root=data, vnwords=datan);
%do i=1 %to &datan;
proc contents
data=&&data&i out=cont&i noprint;
run;
%end;
data cont;
set %do i=1 %to &datan; cont&i %end;;
run;
proc sort data=cont; by name length; run;
data attrib;
set cont;
by name length;
if last.name;
if type=2 then length2='$'||put(length,best.-l);
else if type=1 then length2=put(length,best.-l);
run;
proc sql noprint;
select strip(name)||' label='||'"'||strip(label)||'"'||' length='||strip(length2)
into: attribs separated by ' '
from attrib
quit;
%put &attribs;
data &outds;
attrib &attribs;
set &inds;
run;
%mend setdata;
|