如何将用户定义的格式应用于库中的所有SAS数据集?
例如,我创建了一个格式NY,如下所示:如何将用户定义的格式应用于库中的所有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 _
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值。您可以检查您的数据,看看这些是否是唯一存在的值,但这并不意味着这些是唯一可能的值。