为什么我不能在 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;
我有一个使用信息格式将字符转换为数字的代码,我使用长度函数作为信息格式的值。
但是,我在使用这种方法时遇到了错误。
这个问题产生的背景是之前的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;