1

我对 SAS 很陌生,我使用proc formatto 属性值来编码:

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代码设置为.,但作为一个字符,而不是作为缺失值。

如何将其设置为缺少?

4

2 回答 2

1

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

DATA foo; 
  SET bar;
  my_var = input(put(my_var ,code_to_value.),best.);
RUN;
于 2018-01-31T12:13:11.603 回答
1

Allan'sinput(put是一个非常常见和合法的结构。

这里有更多信息,可以更深入地了解。

value语句Proc FORMAT创建一个format. 格式始终执行“到文本”映射。

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

一个invalue语句创建一个informat.

  • 数值信息将字符值映射到数值
  • 字符信息将字符值映射到字符值
  • 可以使用 和 函数以编程INPUT方式应用INPUTC信息INPUTN

没有直接将数值映射到数值的格式/函数组合。

与数字一起使用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:
于 2018-01-31T14:12:33.647 回答