将数字格式化为字符后无法 split/subset 数据
Cannot split/subset data after format numeric to character
在原始数据集中,性别列被编码为1或2。使用用户自定义格式后,性别显示为'female'和'male'。我想将数据集拆分为两个仅包含 'female' 或 'male' 的数据集。
以下代码不起作用。
data test;
input gender age;
CARDS;
1 43
2 43
1 55
2 56
;run;
proc format;
value GENDER
1 = 'Female'
2 = 'Male' ;run;
proc datasets;
modify test;
format gender GENDER.;run;
data female male;set test;
if gender = 'Female' then output female;
if gender = 'male' then output male;run;
我会得到一个错误,因为
NOTE: Character values have been converted to numeric values at the places given by:
(Line):(Column).
但是如果我将最后一部分更改为以下代码。它会起作用。
data female male;set test;
if gender = 1 then output female;
if gender = 2 then output male;run;
我知道问题出在比较字符和数值上。但我想知道无论如何我可以在比较中使用 'female' 和 'male' 吗?在某些情况下,检查用户定义 format.Thanks 的每个定义真的很烦人。
不是真的。格式仅适用于外观,因此需要基础值。如果需要,您可以使用 PUT() 转换为字符以使用格式化值。
If Put(gender, gender.) = 'male' then output male;
另外,请注意很少需要将 SAS 数据集拆分成子集。通常使用 BY 效率更高。
编辑:基于以下评论
正确的方法是使用 VVALUE,它将 return 变量的格式化值,但您不需要知道用户定义的格式名称或变量类型。
if vvalue(gender) = 'male' then output male;
在原始数据集中,性别列被编码为1或2。使用用户自定义格式后,性别显示为'female'和'male'。我想将数据集拆分为两个仅包含 'female' 或 'male' 的数据集。 以下代码不起作用。
data test;
input gender age;
CARDS;
1 43
2 43
1 55
2 56
;run;
proc format;
value GENDER
1 = 'Female'
2 = 'Male' ;run;
proc datasets;
modify test;
format gender GENDER.;run;
data female male;set test;
if gender = 'Female' then output female;
if gender = 'male' then output male;run;
我会得到一个错误,因为
NOTE: Character values have been converted to numeric values at the places given by:
(Line):(Column).
但是如果我将最后一部分更改为以下代码。它会起作用。
data female male;set test;
if gender = 1 then output female;
if gender = 2 then output male;run;
我知道问题出在比较字符和数值上。但我想知道无论如何我可以在比较中使用 'female' 和 'male' 吗?在某些情况下,检查用户定义 format.Thanks 的每个定义真的很烦人。
不是真的。格式仅适用于外观,因此需要基础值。如果需要,您可以使用 PUT() 转换为字符以使用格式化值。
If Put(gender, gender.) = 'male' then output male;
另外,请注意很少需要将 SAS 数据集拆分成子集。通常使用 BY 效率更高。
编辑:基于以下评论
正确的方法是使用 VVALUE,它将 return 变量的格式化值,但您不需要知道用户定义的格式名称或变量类型。
if vvalue(gender) = 'male' then output male;