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

如何将用户定义的格式应用于库中的所有SAS数据集?,sas,Sas,例如,我创建了一个格式NY,如下所示: Proc format; value $NY 'Y'='Yes' 'N'='No' ; run; 因此,我想将上述格式应用于将所有SAS数据集的值解码为“是”或“否”,无论编码值是Y还是N。要完成上述操作,您需要处理所有有问题的数据集,例如 * Assuming no variable names starting with underscore in data *; data _NULL_; set ds end=_last; array _

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

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

因此,我想将上述格式应用于将所有SAS数据集的值解码为“是”或“否”,无论编码值是Y还是N。

要完成上述操作,您需要处理所有有问题的数据集,例如

* 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;

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

您的格式定义正确。您现在需要应用它:
data for mtted;设置开始;设置问题NY中的变量格式。;运行你好,非常感谢您的回复。上面的代码将帮助我解码/格式化我知道的变量的值..意味着我必须以您上面提到的方式在format语句中明确提到变量的名称..您能告诉我如何格式化或解码库中跨数据集的值,而不提变量的名称吗格式语句中的变量。我定义了很多格式来解码变量,所以无论输入编码值在哪里,我都需要对它们进行解码。非常感谢您的帮助。感谢有许多相同标称类型(Y或N)的变量的解决方案。规范化做法是使用通用后缀或前缀来表示类型。所以变量
diabetes
将是
diabetes\u flag
diabetes\u yn
患有糖尿病
。当所有相同类型的变量遵循相同的命名约定时,基于规则应用格式比扫描所有表中的每个值更容易。感谢Richard的帮助。问题是什么?注意:无法判断变量是否仅包含Y/N值。您可以检查您的数据,看看这些是否是唯一存在的值,但这并不意味着这些是唯一可能的值。