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

tilde, dlm and colon format modifier in list input

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

data scores;
    infile datalines dsd;
    input name : . score1-score3 team ~ . 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 : ~ . ?

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

  1. 需要冒号运算符 告诉 SAS 使用提供的信息,但 在遇到定界符时停止读取此变量的值 。不要忘记冒号,因为没有它们,SAS 可能会读取分隔符以满足信息格式中指定的宽度。

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

  1. ~波浪号必须 以特殊方式处理字符值中的单引号、双引号和定界符。此格式修饰符 将带引号的字符值中的分隔符读取为字符而不是分隔符,并在将值写入变量时保留引号。

为什么需要这个,因为SAS为它自己的功能保留了某些分隔符即单引号,双引号用于表示字符串,当你希望SAS处理这些引号不同,您必须使用 - Tilde (~)

明确告诉 SAS

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

  1. SAS 只能自动识别单个 blank 作为分隔符,它不能自动识别 ,,因为 delimiter.You 必须明确告诉 SAS。在您的情况下,您使用了选项 dsd,它为您做了三件事。

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

    • (ii) SAS 将两个连续的分隔符视为缺失值并从字符值

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

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