Play Open
Loading Please wait Loading Please wait Loading Please wait Loading Please wait Loading Please wait Loading Please wait

SAS数据导入与读取方法详解

1、SAS读取数据的方法

ViewTable直接输入;导入向导将外部数据导入,创建成SAS数据集;使用数据步读取外部数据,或者内部创建SAS数据集;使用过程步读取外部数据,或者内部创建SAS数据集;

2、用ViewTable输入数据

调用ViewTable窗口,在工具栏的下拉菜单中选择表编辑器,在ViewTable中直接输入数据。

3、用导入向导读取文件

导入向导会浏览你的文件以决定变量的类型,并默认数据表的第一行存放变量名,Options可以改变这种默认设置。

4、SAS读取原始数据

内部原始数据:如果直接将数据输入SAS程序中,那么数据就是SAS内部数据。例如:

data a;

input president $ party $ number;

datalines;/*可以用cards代替datalines*/

Adams F 2

Lincoln R 16

Grant R 18

Kennedy D 35

;

run;

外部原始数据:数据在SAS程序外部时,使用infile语句告诉SAS外部数据的文件名和存放路径,它在data语句之后,在input语句之前。infile后面的文件名和路径要用引号,各种系统的引用方式不同。

例如:

/*读取C盘MyRawData目录中的文件test.dat*/

data b;

infile 'c:\MyRawData\test.dat';

input president $ party $ number;

run;

5、INPUT读取外部数据

(1)list input读取空格分开的原始数据

/*形式如下:*/

input Name $ Age Height;

/字符串数据不能包含空格,长度不能超过8个字符,字符串变量用$表示/

(2)column input读取按固定列排列的原始数据

/*形式如下:*/

input Name $ 1-10 Age 11-13 Height 14-18;

/*变量名后的数字代表列位置,允许字符串中包含空格*/

(3)informats读取非标准格式的原始数据

/*形式如下:*/

input Name $10. Age 3. Height 5.1 BirthDate MMDDYY10.;

/informats的三种普遍格式为:字符串、数值、日期,像日期就是最普通的非标准数据/

eg.

input Name $16. Age 3. +1 Type $1. +1 Date MMDDYY10.

(score1 score2 score3 score4 score5)(4.1);

/年龄后的+1代表跳过一列,score1-score5都是4.1格式**/

可选择变量形式:

(4) 混合读取方式

/*形式如下:*/

input ParkName $ 1-22 State $ Year @40 Acreage COMMA9.;

/ParkName是column方式读取,State和Year是list方式读取,Acreage是formatted方式读取/

list方式下:SAS自动找到非空格区域开始读取;

column方式下:SAS读取你指定的特定位置;

informatted方式下:SAS依次读取,不会按照指示器提示读取;

指示器@40告诉SAS在读取Acreage之前,移动到第40列去。

(5)读取凌乱的原始数据

当数据排列凌乱,长度不一时,需要使用@'character'列指示器和colon modifier。

/*@'character列指示器'*/

input @'[' AccessDate DATE11. @'GET' File :$20.;

/*@'['告诉SAS读取[之后的数据,@'GET'告诉SAS读取GET之后的数据,:$20指明File的长度为20*/

/colon modifier/

File :$20. 在$20前加上冒号(:)告诉SAS遇到空格不再继续读取

(6)跨行观测值的读取方式

/*形式如下:*/

input City $ State $

/ NormalHigh NormalLow

#3 RecordHigh RecordLow;/*#n代表跳至第n行*/

/*先读取第一行的City和State,

斜线(/)告诉SAS移动到下一行的第一列,读取NormalHigh和NormalLow,

#3告诉SAS移动到第三行的第一列继续读取RecordHigh和RecordLow,

/可以用#2代替,也可以用/代替#3*/

(7)一行有多个观测值的原始文件读取

/*当一行出现多个观测值时,可以在input语句结尾加一个停止符号@@*/

/*形式如下:*/

input City $ State $ NormalRain MeanDaysRain @@

原始数据:

Nome AK 2.5 15 Miami FL 6.75

18 Raleigh NC . 12

读取之后的数据:

(8)读取原始数据的部分观测值

/*读取部分观测值时,在input语句结尾加上@,让SAS先停在此处,同时用IF语句筛选出

符合条件的数据,再用一个input语句来读取剩下的变量*/

/*形式如下:*/

input Type $ @;

if Type='surface' then delete;

input Name $ 9-38 AMTraffic PMTraffic;

原始数据:

读取之后的数据:

@vs@@:

@和@@都是行停留指示符,@能使SAS停留到下一个input语句(也不换行),@@能使停留的时间到下一个data步(也不换行)。

(9)用infile语句中的选项控制输入

/*A、FIRSTOBS=

FIRSTOBS=告诉SAS从哪一行开始读取数据。

*/

data icecream;

infile 'c:\MyRawData\Sales.dat' FIRSTOBS=3; /*FIRSTOBS=3让SAS从第三行开始读取数据*/

input Flavor $ 1-9 Location BoxesSold;

run;

/*B、OBS=

OBS=告诉SAS一直读取到哪一行位置,注意是行而不是观测值(有的观测值占据多行)

*/

data icecream;

infile 'c:\MyRawData\Sales.dat' FIRSTOBS=3 OBS=5; /*让SAS读取第三行到第五行的数据*/

input Flavor $ 1-9 Location BoxesSold;

run;

/*C、MISSOVER

在input语句中输入的几个变量,SAS在观测值中就读取几个变量,如果一行未读完,则进入下一行直到输入的变量都读取了变量值。missover可以让SAS不进入下一行读取,未赋值的变量就使其成为缺失值。

*/

data class;

infile 'c:\MyRawData\Scores.dat' MISSOVER;

input Name $ Test1 Test2 Test3 Test4 Test5;

run;

/*假设原始数据如下:*/

Nguyen 89 76 91 82

Ramos 67 72 80 76 86

/*MISSOVER让SAS将Nguyen第五门课的成绩设为缺失值,从而不牵扯到下一行*/

/*D、Truncover

使用column input或formatted input输入时可能会需要这个选项,因为这时有的数据行比其他的短

*/

data homeaddress;

infile 'c:\MyRawData\Address.dat' Truncover;

input Name $ 1-15 Number 16-19 Street $ 22-37;/*Street最多占到第37列,若某些行没有占到第37列,用Truncover可以使较短的行不受影响地读取*/

run;

(10)用数据步读取分隔符文件

DLM=和DSD选项可以使SAS容易地读取用分隔符隔开的文件。

data reading;

infile 'c:\MyRawData\Books.dat' DLM=',';/*DLM=','代表读取以逗号隔开的文件*/

input Name $ Week1 Week2 Week3 Week4 Week5;

run;

DSD的作用:

忽略引号中数值的分隔符;自动将字符数据中的引号去掉;将两个相邻的分隔符当做缺失值处理。

6、用导入过程(import)读取分隔符文件

注意事项:

如果想要创建的数据集名字已经存在,那么要用replace选项代替;getnames=yes意味着导入数据的时候,第一行是变量名,getnames=no意味着导入数据的时候,第一行是数据;

如果你的数据文件是DLM类型的,PROC IMPORT会假定分隔符为空格,用DELIMITER=可以改变默认的分隔符;

例子:

proc import datafile="c:\MyRawData\Bands.xlsx" out=music

dbms=xlsx replace;

sheet="sheet1";

getnames=yes;

run;

Posted in 声优专区
Previous
All posts
Next