带列表输入的嵌入空格的字符值

Character value with embedded blanks with list input

我想阅读以下流内数据线

    datalines;
Smith,12,22,46,Green Hornets,AAA
FriedmanLi,23,19,25,High Volts,AAA
Jones,09,17,54,Las Vegas,AA
;

我在它读取 AAA 项目到团队变量时使用,但不是 div。我应该如何放置 &(用于读取带有嵌入空格的字符的符号?)

data scores2;
    infile datalines dlm=",";
    input name : . score1-score3 team . div $;
    datalines;
Smith,12,22,46,Green Hornets,AAA
FriedmanLi,23,19,25,High Volts,AAA
Jones,09,17,54,Las Vegas,AA
;
run;

请注意,我在团队之前也使用了 :(你已经对其他变量使用了冒号运算符 :,不知道你为什么错过这里)正如我已经在你的其他查询,使用 : 冒号运算符 (),它会告诉 SAS 使用提供的信息,但在遇到分隔符时停止读取该变量的值。在这里,因为您没有使用此运算符,这就是 SAS 尝试读取 20 个字符的原因,即使 中间有一个分隔符。

测试

data scores2;
    infile datalines dlm=",";
    input name : . 
          score1-score3 
          team : . 
          div : .;
datalines;
Smith,12,22,46,Green Hornets,AAA
FriedmanLi,23,19,25,High Volts,AAA
Jones,09,17,54,Las Vegas,AA
;
run;

另一种通常更容易阅读的方法是使用 informat 语句。

data scores2;
    infile datalines dlm=",";
    informat name .
             team .
             div .;
    input name $ score1-score3 team $ div $;
    datalines;
Smith,12,22,46,Green Hornets,AAA
FriedmanLi,23,19,25,High Volts,AAA
Jones,09,17,54,Las Vegas,AA
;
run;

这与使用冒号 (input name :.) 的效果相同,但组织起来更清晰。

需要说明的是,嵌入的空格与逗号分隔的输入无关; '20'x(即 space)不是定界符时只是另一个字符。 this article 中解决了 & 符号的作用,更具体地说,如果 space 是分隔符,它允许您要求两个连续的分隔符来结束一个字段。示例:

data scores2;
    infile datalines dlm=" ";
    informat name .
             team .
             div .;
    input name $ score1-score3 team & $ div $;
    datalines;
Smith 12 22 46 Green Hornets  AAA
FriedmanLi 23 19 25 High Volts  AAA
Jones 09 17 54 Las Vegas  AA
;
run;

请注意所有团队名称后的双 space - 这是 & 所要求的。但这只是因为分隔符是 space(这是默认的,所以如果你删除了 dlm=' ',它也将是必需的。)