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

Why can't I use length function inside input function in SAS?

我有一个使用信息格式将字符转换为数字的代码,我使用长度函数作为信息格式的值。

但是,我在使用这种方法时遇到了错误。

这个问题产生的背景是之前的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。

这不是有效的语法。您必须使用 inputn an 然后为格式生成一个字符串。

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

但最好使用 Use BEST32。对于最多 32 个字符长度的所有通用数字。

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

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

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

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

emp_value = input(emp_input,32.);

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

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

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

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