在原始数据集中,性别列编码为1或2.使用用户定义的格式后,性别显示为'女性'和男性'。我想将数据集拆分为两个包含' female'或者'男性'只要。 以下代码不起作用。
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;
我知道问题来自比较字符和数值。但我想知道我是否可以使用女性'和男性'在比较中?在某些情况下,检查用户定义格式的每个定义真的很烦人。谢谢。
答案 0 :(得分:2)
不是真的。格式仅适用于外观,因此需要基础值。如果需要,您可以使用PUT()转换为字符以使用格式化的值。
If Put(gender, gender.) = 'male' then output male;
另外,请注意,要求将SAS数据集拆分为子集是非常罕见的。通常使用BY更有效。
编辑:基于以下评论
正确的方法是使用VVALUE,它将返回变量的格式化值,但您不需要知道用户定义的格式名称或变量类型。
if vvalue(gender) = 'male' then output male;