当我运行以下代码时,我看到我的字符变量中的数字被移动为值
data test;
input names$ score1 score2;
cards;
A1 80 95
A 2 80 95
;
run;
proc print data=test;
run;
导致输出如下
SAS系统
Obs names score1 score2
1 A1 80 95
2 A 2 80
如何创建类似" A 2"的变量?有空间,以便2不会移位
答案 0 :(得分:1)
您的问题是您正在使用空格分隔的数据输入。它是真正的空间分隔,还是柱状(固定位置)?
data test;
input names $ 1-4 score1 5-12 score2 13-20;
cards;
A1 80 95
A 2 80 95
;
run;
如果它真的是分隔的,而你只是没有完全复制这里的数据,那么你有几个选择。您可以使用&
字符要求SAS查找两个连续的空格作为分隔符,但您的实际数据也没有正确 - 但它看起来像这样:
data test;
input names &$ score1 score2;
cards;
A1 80 95
A 2 80 95
;
run;
或者,如果你真的有这个问题,你有一些单独的空格分隔符和一些不是的单个空格,你将不得不计算出某种逻辑来做到这一点。确切的逻辑取决于你的规则,但这里是一个例子 - 在这里我寻找那个空间,并假设如果它在那里然后还有一个字符,然后我想把所有东西都移到一个以便我有一个保证的双现在的空间。这可能不对你来说是一个很好的规则,但它是你可能做的一个例子。
data test;
input @;
if substr(_infile_,2,1)=' ' then do; *if there is a space at spot two specifically;
_infile_ = substr(_infile_,1,3)||' '||substr(_infile_,4); *shift everything after 3 down;
end;
input names &$ score1 score2;
cards;
A1 80 95
A 2 80 95
;
run;
答案 1 :(得分:0)
如果您的输入是固定块,如建议的那样,并且NAMES字段是12个字节,如数据所示,那么您可以使用格式化输入进行NAMES。
data test;
length names $ 12 score1 score2 8;
input names $12. score1 score2;
names=trim(left(names));
cards;
A1 80 95
A 2 80 95
;
run;