变量包括:变量名,属性数目,属性集(用逗号分隔),该变量最大频数的属性及相应频率,次大频数的属性及相应频率;
代码如下:
- %macro NomFirst2Freq(Lib,DSin,DSout);
- proc sql noprint;
- create table &Lib..&DSout (Variablename char, PropertyNum num,AttriDictionary char(100),
- FirstPropertyValue char,FirstPropertyFreq num,
- SecondPropertyValue char,SecondPropertyFreq num);
- quit;
- proc contents data=&Lib..&DSin out=temp_content noprint;
- run;
- proc sql noprint;
- select name into :VarList separated by " " from temp_content where type = 2;
- quit;
- %put &VarList;
- %let i=1;
- %let condition = 0;
- %do %until (&condition =1);
- %let Var&i=%scan(&VarList,&i);
- %if "&&Var&i" ="" %then %let condition =1;
- %else %let i = %Eval(&i+1);
- %end;
- %let Nvars=%eval(&i-1);
- %do i=1 %to &Nvars;
- proc freq data=&Lib..&DSin noprint;
- tables &&Var&i /missing out=Freq_Var;
- run;
- proc sort data=Freq_Var;
- by decending percent;
- run;
- proc sql noprint;
- select count(*) into :PropertyNum from Freq_Var;
- select &&Var&i into :AttriDictionary separated by "," from Freq_Var;
- quit;
- %put &AttriDictionary;
- data temp_value;
- set Freq_Var;
- retain N 1;
- %if N le 3 %then %do;call symput("percent"||left(N),percent);call symput("X"||left(N),&&Var&i);N+1;%end;
- run;
- proc sql noprint;
- insert into &Lib..&DSout values("&&Var&i",&PropertyNum,"&AttriDictionary",
- "&X1",&percent1,
- "&X2",&percent2);
- quit;
- %end;
- %mend;
- %NomFirst2Freq(work,Creditcard,a);