为字符变量添加空格

时间:2018-01-24 16:12:20

标签: sas

当我运行以下代码时,我看到我的字符变量中的数字被移动为值

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不会移位

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;