无法将格式数字后的数据拆分/子集到字符

时间:2016-03-17 06:06:12

标签: format sas subset numeric

在原始数据集中,性别列编码为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;

我知道问题来自比较字符和数值。但我想知道我是否可以使用女性'和男性'在比较中?在某些情况下,检查用户定义格式的每个定义真的很烦人。谢谢。

1 个答案:

答案 0 :(得分:2)

不是真的。格式仅适用于外观,因此需要基础值。如果需要,您可以使用PUT()转换为字符以使用格式化的值。

If Put(gender, gender.) = 'male' then output male;

另外,请注意,要求将SAS数据集拆分为子集是非常罕见的。通常使用BY更有效。

编辑:基于以下评论

正确的方法是使用VVALUE,它将返回变量的格式化值,但您不需要知道用户定义的格式名称或变量类型。

if vvalue(gender) = 'male' then output male;