您的位置:首页 > 其它

SAS学习笔记(二)

2017-11-11 15:32 281 查看
本次课主要总结以下语句的使用:

DATA

INPUT

DATALINES(CARDS)和DATALINES4

LENGTH

LABEL

LOSTCARD

INFORMAT/FORMAT

MISSING

OPTIONS

1、data

格式:DATA <数据集名> <选项>

常用选项:label=为数据集提供标记;DROP=列出不包括在数据集中的变量

缺省逻辑库为WORK,临时逻辑库,当关闭软件,这个逻辑库的数据集会消失

同一次会话过程中,可以有多个DATA语句创建多个数据集。最后建立的为当前数据集

如果分析工作不需要建立数据集,DATA语句中的数据集名可以用_NULL_

示例1:

DATA student;

INPUT num $ name $ sex $;

DATALINES;/*定义内置数据,功能与cards相同

060101 zhangsan f

060102 liling m

060201 liufeng f

DATA score;

INPUT num $ phy math engl;

DATALINES;

060101 89 90 77

060102 92 70 88

060201 80 84 75

PROC PRINT;/*这里有两个数据集,没有指出输出哪个数据集,则会输出最后一次建立的数据集

/* PROC PRINT DATA=student; */要指定具体数据集名称才会输出相应的数据集,输出student数据集

RUN;

示例2:空数据集,不会再硬盘建立数据集,只是为了输出a这个变量

data _null_;

a=sin(3.14159/4);

put a ; /*显示a的值*/

run;

示例3:

LIBNAME ep 'e:\saslx' ;/*把数据输出到本地就可以永久使用

DATA ep.students;

INPUT num $ name $ sex $ h w ;

DATALINES;

020801 ZHANGLING F 1.56 47.1

020802 ZHAOHUA M 1.72 61.5

030813 WANGQANG M 1.69 64.5

030824 LIULI F 1.58 53.6

030815 SHIDONG F 1.60 48.0

;

PROC PRINT;

RUN;

建立永久数据集以后,下次可以直接调用

LIBNAME ep 'e:\saslx' ;

PROC PRINT DATA=ep1.students;/*调用本地的数据集

2、input

(1)列表输入

用于描述输入的数据。从外部文件或紧跟的CRADS读入数据,赋给该语句列出的各个变量。

格式:INPUT <数据项描述>……

一般认为读入的数据是数值型,除非:1 变量名后有$号;2 使用字符的输入格式表示;3 变量事先被定义成字符型

数据中的缺项值用“.”表示。如果读入数据与数据类型不匹配,则按无效数据置为缺项值。

(2)格式化输入

格式:INPUT 变量名 <修饰符> 输入格式……;

输入格式例子:INPUT name $10. birthday mmddyy10. weight 4.1;(解释)/*表示变量有10位的长度,这个变量有4个字符那么宽,点1表示一个小数位)

数据中的年月日之间应用特殊符号或空格隔开。格式化输入时,数据项不再以空格作为结束标志,而是由读指针按给出的格式长度移动,依次读数据项。数据前后的空格也要计算在内。

(3)格式列表

INPUT (score1-score5) (4. 4. 4. 4. 4.);/*输入5个变量,分别是score1-score5,每个变量的长度都是4

INPUT (score1-score5) (4.);

INPUT (name core1-score5) ($10. 5*4.);

(4)格式修饰符

“:”修饰符。表示从下一个非空格列读入数据,直到:1 遇到再下一个空格列;2 读到预先定义的变量长度;3 数据行结束。哪个先出现就在哪结束

“ &”修饰符。表示从下一个非空格列读入数据,直到:1 遇到连续的两个空格;2 在DATA步中定义的最初的变量长度;3 输入行结束。哪个先出现就在哪结束

DATA ONE;

INPUT NAME & $12. SEX $ AGE;/* &符号解决名字读取时,名字之间有空格,避免出现只把名字的某个字作为变量的情况,前面的格式列表是以空格分割变量的。

DATALINES;

Li Li F 19

Wang Da Zhi M 20

PROC PRINT;

RUN;

(5)指针控制

列指针

绝对指针控制:数值型(指出位置)、字符型(指出要匹配的字符串)

相对指针控制
行指针

以下为绝对指针控制:

数值型指针

@n:INPUT @15 sales 5.;/*从绝对位置15开始读sale,sales长度为5

@指针变量:A=25; INPUT num 1-6 @A num $ 10.;

@表达式:

DATA ONE;

B=2;

INPUT @(B*3) GRADE @1 A 3.;/*从位置6开始,GRADE读取为67,A从第一个位置开始读三个长度的数据,读取为123

DATALINES;

1234567 343454

;

proc print;

run;

字符型指针

三种形式:@’字符串’,@字符变量,@字符表达式

DATA ONE;

INPUT @'size=' A 3.;/* 在输入的数据中找到size这个字符串,从'size='后面的第一个数据开始读,读取3个长度,则A读取为343

DATALINES;

Li Li F19size=343454

Wang Da Zhi M 20size=123456

PROC PRINT;

RUN;

以下为相对指针控制

三种形式:+n,+指针变量,+表达式,意指把指针从当前位置移过规定的列数/*n可正可负,如果为正表示从当前位置向前移动n个长度,为负则向后移动n个长度

负数表示指针往前移动

例子

INPUT @23 length 4. +5 width;

M=-1; INPUT x 1-10 +M y 2.;/*表示输入x变量,位置为1-10,然后又向左移动一个长度,读取y变量,长度为2

INPUT x 1-10 +(-1) y 2.;

行指针

适用于一个观测值占有多个输入行的情况

4种形式:#n,#指针变量,#表达式,/

INPUT语句中,#号后最大的数字决定每个观测占有多少行

/表示把指针移动到下一输入行的第一列

当每个观测有多个输入行,但不从最后一行读取数据的时候,在INPUT语句末尾必须使用#将指针移到最后一行。

例子

INPUT @31 age 3. #3 id 3-4 #2 @6 name $ 20.;/*第一行,跳到31的位置,读取3个长度得到age值,#3跳到第三行,读取Id,#2 @6跳到第2行从第16个位置开始读取20个长度的字符name

INPUT name $ 1-10 #2 age 13-14 #4;/*表示我要读取的变量占了4行,但是我只需要读取第一第二行的数据

INPUT age grade/score1-score5;/*在第一行读取age grade,再跳到第二行读取score1-score5

INPUT a / b #1 @52 c #2;

行保持符

多个INPUT语句读取同一数据行的数据,使用单尾随符@

一个INPUT语句在一个输入行中读取多个观测,则使用双尾随符@@

例子

DATA b;

INPUT x y @@;/*表示不换行

DATALINES;

3.16 2.9 5.8 3 4.9 4.17

;

PROC PRINT;

RUN;

3、 DATALINES语句/*定义内置数据

相当于CARDS语句

该语句必须是数据步的最后一条语句

MISSOVER处理

DATA TEMP;

INFILE DATALINES MISSOVER;/*因为Input没定义缺失,所以这里定义missover,这样不会删除多于变量的数据列

INPUT X Y Z ;

DATALINES;

1 10 100

2 20

3 30 300

;

PROC PRINT;

RUN;

4、DATALINES4

专用于处理数据里包含分号的情况

数据最后用4个“;”结束

DATA B;

INPUT NUM CITATION & $50.;

DATALINES4;

1 SMITH, 1982

2 ALLEN ET AL., 1975; BRADY, 1983

3 BROWN, 1980; LEWIS,1974; WILLIAMS,1972

;;;;

PROC PRINT;

RUN;

5、LENGTH

用于指出变量的长度(缺省为8)

格式:LENGTH 变量 [$] 长度;

DATA a;

LENGTH name $ 12;

INPUT name sex $ h w;/*也可以直接在变量后指明长度,如INPUT names $ 12 sex $ h w;这样可以省略Length

DATALINES;

ZhangZhihui F 1.71 49

ZhaoChangtai M 1.73 55

;

RUN;

6、label  /*给变量别名

DATA d;

INPUT name $12. sex $ h w;

LABEL h='身高' w='体重';

DATALINES;

ZhangZhihui F 1.71 49

ZhaoChangtai M 1.73 55

;

PROC PRINT LABEL;

run;

7、 LOSTCARD

当一个观测值占有多个输入行时,该语句用于防止丢失输入行后引发的定位错误

通常和IF … THEN … 语句一起使用,IF语句用于指出判定数据行丢失的条件

例子

DATA TEST;

INPUT ID TEST1 #2 IDCHECK TEST2 TEST3;

IF ID NE IDCHECK THEN LOSTCARD; /*NE不等于,判断ID是否等于IDCHECK,,303和304不等,303就会被丢弃,丢弃后,因为LOASTCART的作用,编号会重排

DATALINES;

301 92

301 61 73

302 83

302 88 99

303 92 78

304 85

304 90 94

;

PROC PRINT;

RUN;

8、INFORMAT和FORMAT

INFORMAT语句用来给INPUT指定格式码

FORMAT语句用来给PRINT指定格式码

DATA STUDENT;

INFORMAT birthday mmddyy8.;

INPUT name $ birthday ;  /*还可以直接省略掉

INFORMAT birthday mmddyy8.; ,直接写成INPUT name $ birthday mmddyy8.;

FORMAT birthday WORDDATE.;

DATALINES;

ZhongLi 03-15-89

LiuWei 07/22/85

;

PROC PRINT;

RUN;

9、MISSING

用于指出某些数据缺失的原因
acc7

使用一个字母进行MISSING登记,系统遇到MISSING值后,不会按无效数据处理,而是登记到数据集中

DATA surv;

MISSING N R; /*输入数据中遇到N和R,系统不会把他们作为缺失值处理,仍然可以正常输入

INPUT num answer @@;

DATALINES;

1001 2 1002 R 1003 1

1004 N 1005 2

proc print;

RUN;

10、读入txt文件

DATA d1;

INFILE 'E:\sasdt\fit1.txt';

LENGTH name $ 10;

INPUT num $ name sex $ height weight;

proc print;

RUN;

11、读入excel数据

LIBNAME ep 'e:\saslx';

PROC IMPORT OUT= EP.score /*为建永久数据集另加的语句 */

DATAFILE= "E:\SASEX\cjb.xls"

DBMS=xlsx REPLACE;

SHEET="Sheet1";

GETNAMES=YES;

options nodate;

proc print;

RUN;

12、从已有数据集读入数据

SET语句

DATA d3;

SET d1;

RUN;

从已有数据集d1中读入数据,建立新数据集d3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SAS