SAS - 更改所有数据集中多个变量的格式

时间:2014-06-04 21:47:07

标签: sas sas-macro

我正在编写一个SAS宏,它正在尝试检查和更改格式,还检查并报告排除项(不应该存在的值),有效值(应该只有XYZ)等所有变量和所有变量库中的数据集。

以下代码仅用于更改格式。

我创建了一个引用文件,它是proc内容的输出和具有每个变量规则的外部文件的组合。所以这个文件有数据集名称,变量名称和所有规则(格式,排除,有效值,最小值,最大值等)

我无法让SAS浏览每个数据集中的每个变量 - 此代码的最后一部分是我遇到的问题。

options mprint;
%macro reformat_var;

data _null_;
set SASDATA.Reference_File;
if Country='USA' then do;
    call symput("SASData",SASData_Folder);
    call symput("Country_Name",Country);
end;
run;

proc sql noprint;
select Data_Name, /*SAS dataset name */
       Var_Name,  /* Variable name */
       Column_informat, /* current format of the variable in the data */
       Column_format  /* format I want to change to */
into : Data_List separated by ' ',
     : Var_List separated by ' ',
     : Informat_List separated by ' ',
     : Format_List separated by ' '
from SASDATA.Reference_File;
quit;

proc sql noprint;
select count(filen) 
into :cntfile 
from sasdata._indexfile; 
/*created in a prior step, indexfile has a list of all the SAS dataset names */
%if &cntfile>=1 %then %do;
    select filen into :filen1-:filen%left(&cntfile)
    from sasdata._indexfile;
%end;
quit;

/* Change date formats  - this is where I am getting stuck – how do I check format 
for each variable in each dataset using the macro variables (Data_List, Var_List, 
Informat_list, Format_List) */

%do i=1 %to &cntfile;
    data sasdata.&&filen&i;
    set sasdata.&&filen&i;
    %if &Country_Name='USA' and &Informat_list='mmddyy10.' %then %do; 
        format &Var_List &Format_list;
    %end;
%end;
run;
%mend reformat_var;

%reformat_var;

1 个答案:

答案 0 :(得分:1)

我不建议使用此方法。

相反,请考虑使用SASHELP.VCOLUMN数据集生成变量和格式的列表。然后使用proc数据集应用所需的新格式,这样您就不会读入/读出整个数据集。

通过这种方式,您可以非常轻松地比较这两个文件,因为它们希望具有相同的列/行:)

如果你想以这种方式继续,我建议你改变你的PROC SQL步骤来读取类似

的内容
proc sql;
select "format" || var_name || " " || format_name 
    into :format_list separated by ";"
from SASDATA.Reference_File;
quit;

%put &format_list;

这将生成如下格式语句:

 format var1 format1;
 format var2 format2;
 format var3 format3;

您也可以为信息提供相同的信息。

希望有助于您入门。