为什么不能在SAS的输入函数中使用长度函数?

时间:2019-06-17 05:15:33

标签: sas sas-macro

我有一个使用informat将字符转换为数字的代码,并且我使用length函数作为informat的值。

但是,我对这种方法有误。

此问题的背景是之前的信息是固定值。我想增强信息格式的代码以使其灵活并删除固定值。

代码前:

data work.test;
emp_input = '168643123'
emp_value = input(emp_input, 6.);
run;

我当前的测试代码:

data work.test;
emp_input = '168643123'
emp_value = input(emp_input, length(emp_input).);
run;

我希望将字符'168643123'转换为数字168643123的结果。

在代码之前使用输出为:数字168643。

4 个答案:

答案 0 :(得分:2)

那是无效的语法。您必须使用inputn an,然后为该格式生成一个字符串。

data work.test;
  emp_input = '168643123';
  emp_value = inputn(emp_input, cats(put(length(emp_input),3.),'.'));
run;

但最好使用使用BEST32。所有长度不超过32个字符的通用数字。

data work.test;
  emp_input = '168643123';
  emp_value = input(emp_input, BEST32.);
run;

答案 1 :(得分:1)

输入需要第二个参数的文本值。

INPUTN()或INPUTC()可以将第二个参数用作字符串/字符/变量,并使用该参数来应用格式。您必须先将其转换为字符串。

答案 2 :(得分:1)

为什么?当信息的宽度大于要读取的字符串的长度时,INPUT函数很乐意进行调整。只需使用信息允许的最大宽度即可。

emp_value = input(emp_input,32.);

如果您确实想限制读取的字符数(数字后面是否有字母?),则可以使用INPUTN()函数(或INPUTC()函数获取字符结果)。通过在字符串末尾附加一些X并使用宽度在X之前停止的信息格式进行测试。

emp_value = inputn(cats(emp_input,'XXX'),cats(length(emp_input),'.'));

答案 3 :(得分:0)

此代码对我有用。这是基于您所有的答案。非常感谢你!

data work.test;
emp_input = '168643123'
emp_value = inputn(emp_input, cats(length(emp_input),'.'));
run;