将数字格式化为字符后无法 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;