在以下代码中
data temp2;
input id 1 @3 date mmddyy11.;
cards;
1 11/12/1980
2 10/20/1996
3 12/21/1999
;
run;
1 @3
符号是什么意思?我认为1
意味着id
是数据中的第一个字符。我知道@3
表示date
变量以第三个字符开头,但为什么它位于date
前面,而1
位于id
之后?
答案 0 :(得分:2)
因为这是一个写得不好的输入语句。您可以通过多种方式指定输入,并且混合使用几种不同的方式来执行允许混合的操作(主要是)。有关详细信息,请阅读输入中的SAS documentation。
您可以使用的一些常见样式:
input @1 id $5.; *Formatted input. Allows specification of start position and informat, more useful if using date or other informat that is not just normal character/number.;
input id str $ otherstr $ date :date9.; *List input. This is for delimited text (like a CSV), still lets you specify informat.
input @'ID:' id $5.; *A special case of formatted input. allows you to parse files that include the variable name, useful for old style files and some xml/json/etc. type files;
input x 1-10 y 11-20; *Column input. Not used very commonly as it's less flexible than start/informat style.;
在我的经验中,还有其他选项(例如命名输入)不经常使用。
在您的具体示例中,读入第一个变量,列输入[id 1
表示'从位置1读取1个字符数字到id']然后使用格式化输入[{{读取第二个变量1}}说'从位置3 [-13]读取一个11个字符的日期变量到一个数字,使用日期信息将其翻译成一个数字。']它还说有人给你那些不熟悉SAS的代码,因为@3 date mmddyy11.
是正确的信息 - 第11个字符无济于事。