Sas 向字符变量添加空间

Sas 向字符变量添加空间,sas,Sas,当我运行下面的代码时,我看到character变量中的数字作为一个值进行了移位 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

当我运行下面的代码时,我看到character变量中的数字作为一个值进行了移位

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

您的问题是使用了空格分隔的数据输入。但是,它是真正的空格分隔,还是柱状(固定位置)

如果它是真正分隔的,并且您没有在这里完全复制数据,那么您有几个选择。您可以使用
&
字符要求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;
如果您的输入是固定块(如建议的那样),并且名称字段是12字节(如数据所建议的),那么您可以使用格式化输入作为名称


您可以使用下划线字符
,也可以不加空格。@sir虽然我认为这不能回答问题,但如果您想回答,请使用“答案”框。还有“半宽韩国语”字符
ᅠ'
wich类似于空白字符,但实际上是另一个@乔:这是一个部分答案,在我确定op想要什么之前,我不打算给出一个完整的答案。这就是我刚才评论它的原因。@Sir我自己的评论是为了澄清这个问题:它们不是为了答案,甚至不是部分答案。澄清就是问他们你需要知道他们想要什么的信息。我认为你在这里完全走错了方向-OP问了一个关于数据输入的SAS问题,这不是关于添加不同类型的空格的问题,但是如果你想确定的话,你当然可以问这个问题。我的理解是,它是ColumnAri,如果它是ColumnAri,那么第一块代码就是要走的路,或者是输入列数据的另一条路(@position reads)。
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;
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;