列表输入中的波浪号,dlm和冒号格式修饰符

时间:2015-01-06 06:18:02

标签: sas

我想澄清3个概念。 :(colon format modifier)~(tilde)dlm=

data scores;
    infile datalines dsd;
    input name : $10. score1-score3 team ~ $25. div $;
    datalines;
Smith,12,22,46,"Green Hornets, Atlanta",AAA
FriedmanLi,23,19,25,"High Volts, Portland",AAA
Jones,09,17,54,"Vulcans, Las Vegas",AA
;
run;

首先,在输入语句中使用:可以完全取代length语句?为什么我不需要:作为团队变量......如team : ~ $25.

其次,为什么sas可​​以自动识别,是分隔符但不是"blank

1 个答案:

答案 0 :(得分:6)

  1. 冒号操作员是必需的 告诉SAS使用提供的信息,但在遇到分隔符时停止读取此变量的值。不要忘记冒号,因为没有它们,SAS可能会读取分隔符以满足信息中指定的宽度。
  2. http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000144370.htm

    1. ~需要Tilde 以特殊方式处理字符值中的单引号,双引号和分隔符。此格式修饰符将带引号的字符值中的分隔符读取为字符而不是分隔符,并在将值写入变量时保留引号。
    2. 为什么需要,因为SAS为其自身的功能保留了某些分隔符,即单引号,双引号用于表示字符串,当您希望SAS处理这些分隔符时引号不同,您必须使用 - Tilde(~

      将其明确告知SAS

      http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000144370.htm

      1. SAS只能自动识别单个blank作为分隔符,并且无法自动将,识别为分隔符。您必须明确告知SAS。在您的情况下,您使用了dsd选项,它为您做了三件事。

        • (ⅰ) 默认情况下,它会自动将,作为分隔符。如果您想提供任何其他分隔符,则必须使用dlm=选项专门告知SAS。

        • (ⅱ) SAS将两个连续的分隔符视为缺失值,并从字符值中删除引号

        • (iii)指定当数据值用引号括起来时,该值内的分隔符将被视为字符数据

      2. http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000146932.htm