SAS使用INPUT转换字符变量

时间:2018-02-21 19:39:52

标签: sas type-conversion

我有以下数据集,其中每个主题ID都有一个当前为字符格式的对应值(AVAL)。

data test;
    input SUBJID$ AVAL$6.;
    cards;
    001 97.9 
    001 119 
    001 061 
    001 62 
    001 151.0 
    ;
    run;

基本上,我想将AVAL变量从字符转换为数字。我使用了以下代码。

data test;
set test;
AVAL=input(AVAL,1.0);
run;

当我运行此代码时,我没有得到所需的输出。似乎AVAL变量仍然是字符格式

如何将AVAL变量转换为数字格式?

1 个答案:

答案 0 :(得分:0)

这里有几件事。

首先 - 我假设您不能简单地更改初始输入(即,您的第一个数据步骤是说明数据,而不是说明您的代码)。无论如何它有点错误,但最简单的解决方案就是输入AVAL作为数字开始。

第二 - 您无法在不更改名称的情况下将变量更改为数字,但您可以更改名称,然后删除/重命名为“修复”该名称。

第三 - 您的输入语句包含错误的信息。 .的左侧应该是字符的总宽度 - 因此11.5是4宽,因此input(charvar,4.)对于这样的数字是正确的。永远不要放在.之后的任何东西,现在需要它是如此罕见,以至于简单地说永远不会。

你的最终陈述是这样的:

data test;
  set test;
  AVAL_N=input(AVAL,12.); *I use 12 to make *sure* it is plenty wide, but probably you can be lower than that - whatever the widest field possible is;
  drop AVAL;
  rename AVAL_N = AVAL;  *so on the OUTPUT it is correct;
run;