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

use*_*seR 4 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;
Run Code Online (Sandbox Code Playgroud)

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

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

NEO*_*men 6

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

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

  1. ~Tilde需要以特殊方式处理字符值中的单引号,双引号和分隔符.此格式修饰符将带引号的字符值中的分隔符作为字符而不是分隔符读取,并在将值写入变量时保留引号.

为什么需要这样做,因为SAS为其自身的功能保留了某些分隔符,即单引号,双引号用于表示字符串,当您希望SAS以不同方式处理这些引号时,您必须使用-Tilde将其明确告知SAS (~)

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

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

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

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

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

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