input基础以及高级用法
- 格式:doc
- 大小:22.50 KB
- 文档页数:3
INFILE语句(输入文件语句)
用来定义一个外部文件, 它需用INPUT语句读取。
外部文件可以是已存在磁盘上的, 也可
以是从键盘上输入的数据行。
(1)格式:INFILE filespecification options;
(2)说明:filespecification用来定义文件, options给出选择项;
(3)filespecification有以下三种形式:
①fileref(文件标志) ②'filename'(文件名) ③CARDS指明输入的数据紧跟着CARDS语句,
如: INFILE 'C:\HULP\ABC.PRG' options; 这里C:\HULP是文件标志、ABC.PRG是文件名;
又如: INFILE CARDS options; 这里CARDS相当于文件标志。
(4)下列选择项(options)可以出现在INFILE语句中:
①COLUMN=variable或COL=variable定义一个变量, 其值是指针所在的当前列位置。
②END=variable定义一个变量, 作为文件结束的标志。
③EOF=label是一个语句标号, 当INFILE语句读到文件末尾时, 作为隐含的GOTO语句的目标。
④FIRSTOBS=linenumber要求从指定的行开始读取数据, 而不是从文件的第一个记录开始。
⑤LENGHT=variable定义一个变量, 其值是当前输入数据行的长度。
⑥OBS=n指定从一个顺序输入文件中读取数据的最后一个观测(即第1~第n个观测)。
3.INPUT语句(输入语句)
描述一个输入记录中数值的安排情竣给相应的SAS变量赋输入值,该语句只能用于读入存放于外部文件中的数据或跟随在CARDS语句之后的数值。
(1)一般形式:INPUT [specification]…;
(2)说明:在INPUT语句中有四种方式描述一个记录值, 即
①列格式输入(column) INPUT variable [$] startcolumn[-endcolumn] [.decimals];
variable变量名,$指明其前面的那个变量是字符型的,数值型的变量则不写$, 若这个变量在前面已被定义为字符袖量, $也不需写; startcolumn是包含该变量值的输入记录的第
1列的列号, -endcolumn是包含该变量值的输入记录的最后一列的列号。
如果变量值只占一
列, 则省去-endcolumn。
.decimals如果输入值不包含一个隔开整数部分与小数部分的小数
点,decimals用来指明小数部分的位数。
如: INPUT number 10-15.2; 读取number的数值时,
小数部分是两位。
若输入值分别是2314, 2, 400, -140, SAS以.2形式读取的值依次是23.14,
0.02,4.00,-1.40。
又如: INPUT NAME $ 1-8 AGE 11-12; 这里1-8和11-12指列号。
②自由格式(free-format)或表格式输入(list)INPUT variable [$] [&]…;
variable变量名,&指明字符袖量值中可能在一处或多处含有单一的空格, 此时不同变量值之间需用两个或两个以上的空格隔开。
如:
INPUT NAME $ & AGE X1-X4; NAME的值可以形如: J. JONES或J. M. MARY。
自由输入格式
适用场合:输入的值彼此之间至少有一个空格隔开、用小数点(.)而不是空格表示缺失数
据、
字符型数值的最大长度为8个字节,除非在LENGTH、ATTRIB或INFORMAT语句中规定了字符袖
量的长度。
③指定格式输入(formatted)INPUT variable [formatmodifier] informat;
variable变量名,formatmodifier修改输入格式读取数据的方式,有两个格式修饰符:
“:”和“&”,informat给出读取数据时的输入格式,它总是包括一个(·)或以(·)结尾,如:
INPUT NAME $CHAR10. AGE 2.; 这里$CHAR10.和2.分别指定了字符袖量NAME和数值袖量
AGE的输入格式; 当输入的值都是以同一方式排列时,就可以用组格式表来表示格式。
该格式
表是被循环使用的, 直到所有变量都被赋值;带有序号的变量值可用简单的形式列出来, 如:
INPUT X1-X5 (4.1); 这表明5个变量的值都按整数部分占两位,小数部分占一位的格式输入,
加上小数点共4位。
两个格式修饰符的含意: “:”把输入格式与自由格式输入的扫描特征结
合起来,表明变量的值是从以下非空格列中读取的, 直到第1次遇到以下三种情况: 下一个空
格列、先前定义的变量长度已读满、数据行结束;“&”表明一个字符型输入值可能含有一个
或多个嵌在当中的单个空格,此时,不同的数据之间应该用两个以上的空格隔开。
④命名格式输入(named)INPUT {pointercontrol}variable={$}{informat};
“=”指明使用的是命名格式输入方式。
如: INPUT NAME = $ AGE =;
(3)高级INPUT语句用指针来跟踪读取数据的位置。
①列指针控制:绝对和相对列指针控制符分别为“@”和“+”,其作用是把指针移到指
定的列,“@5”与“+5”的区别是: “@5”是把指针直接移到每行的第5列、而“+5”是把指
针从当前的位置向后移动5列。
有9种列指针控制:
@n把指针移到第n列。
如:INPUT @15 AGE 2.;把指针移到第15列, 从数据行的第15-16
列读数据值赋给变量AGE。
@pointvariable 把指针移到指针变量所指的列。
如: A=15; INPUT @A AGE 2.;
@(expression) 把指针移到表达式值所指的列。
如: A=5; INPUT @(A*3) AGE 2.;
@'characterstring' 把指针移到数据行中字符串charaterstring之后的第一个非空格列。
@charactervariable 首先确定字符变量所取值(即字符串)在输入行的位置,然后把指针移到这个字符串之后的第一个非空格列。
@(characterexpression) 先确定字符表达式值的位置,然后移指针到其后第一个非空格列。
@+n 把指针向右移动n列。
如: INPUT @20 AGE 2. +4 WEIGHT;
@+pointvariable 把指针移到指针变量值所指的列。
如: A=-2; INPUT X 1-15 +A Y 2.;
此语句表明从数据行的1-15列取值赋给变量X, 然后指针左移2列从第13列开始取值赋给变量Y。
@+(expression)把指针移到表达式所指的列。
如: INPUT X 1-15 +(-2) Y 2.;
②行指针控制:其控制符有“#”和“/”, 其作用是把指针移到指定的行。
有4种行指
针控制:
#n把指针移到第n行。
#pointvariable把指针移到指针变量值所指的行。
#(expression)把指针移到表达式值所指的行。
/把指针移到下一行的第一列。
如: INPUT NAME $ SEX $ / AGE WEIGHT;
③行固定标识符: @和@@两种, 写在INPUT语句的结尾, 其区别在于:
一个数据行用多个INPUT语句读取数据, 用一个@结尾;一个输入行数据含有多个观测值,
用两个@@结尾。