如何将用户定义的格式应用于库中的所有SAS数据集?

时间:2018-03-02 08:08:30

标签: sas

例如,我创建了一个格式NY,如下所示:

Proc format;
value $NY
'Y'='Yes'
'N'='No'
;
run;

所以我想应用以上格式将值解码为'是'或者'否'在存在编码值Y或N的所有SAS数据集中。

1 个答案:

答案 0 :(得分:0)

要完成上述操作,您需要处理所有相关数据集,例如

* Assuming no variable names starting with underscore in data *;

data _NULL_;
  set ds end=_last;
  array _char [*] _character_;
  length _vars $4000;
  retain _vars;
  if _N_=1 then do _i=1 to dim(_char);
    * initialize a list of all character variables *;
    _vars=cats(_vars,"_",vname(_char[_i]));
  end;
  do _i=1 to dim(_char);
    * drop vars with values not in Y, N *;
    if _char[_i] not in ('Y', 'N') then _vars=tranwrd(_vars,cats("_",vname(_char[_i])),"");
  end;
  if _last then call symput("vars", translate(_vars," ","_"));
run;

proc datasets lib=work;
   modify ds;
     format &vars $ny.;
quit;

如果至少有一个变量符合条件,则上述示例适用于一个数据集。这会将您的格式应用于包含所有空值的字符变量。您可以使用宏在多个数据集上自动执行此代码。