使用 proc 格式设置缺失值

set missing value with proc format

我是 SAS 的新手,我使用 proc format 将值归因于代码:

proc format;
    value code_to_value
        -1 = .
        1 = 0.5
        2 = 0.25
        3 - high = 0;
run;

然后我将其转换为数据集中的数字列。

DATA foo; 
    SET bar;
    my_var = put(my_var ,code_to_value.);
RUN;

问题是此代码将所有 -1 代码设置为 .,但作为一个字符,而不是作为缺失值。

如何设置为缺失?

put() 函数创建一个字符值。如果要转换回数字,请与 input() 结合使用,例如:

DATA foo; 
  SET bar;
  my_var = input(put(my_var ,code_to_value.),best.);
RUN;

Allan 的 input(put 是一个非常常见且合法的结构。

这里有更多信息可以加深理解。

Proc FORMATvalue 语句创建了 format。格式 总是 执行 'to-text' 映射。

  • 数字格式将数值映射到字符值
  • 字符格式将字符值映射到字符值
  • 可以使用 PUTPUTCPUTN 函数以编程方式应用格式

一个 invalue 语句创建一个 informat.

  • 数字信息将字符值映射到数值
  • 字符信息格式将字符值映射到字符值
  • 可以使用 INPUTINPUTCINPUTN 函数以编程方式应用信息格式

没有format/function直接将数值映射到数值的组合。

INPUT() 与数字一起使用将在使用指定的数字信息之前执行到字符的隐式转换(本身并不是一件坏事)。此示例显示 INVALUEINPUT.

proc format;
    invalue code_to_value
        -1 = .
        1 = 0.5
        2 = 0.25
        3 - high = 0;
run;

data have;
  do my_var = -2 to 4; output; end;
run;

DATA want; 
    SET have;
    my_varx = input(my_var, code_to_value.);
RUN;
----- LOG -----
NOTE: Numeric values have been converted to character values at the places given by: