文档库 最新最全的文档下载
当前位置:文档库 › 第4章 用编程读入数据建立SAS数据集

第4章 用编程读入数据建立SAS数据集

第4章 用编程读入数据建立SAS数据集
第4章 用编程读入数据建立SAS数据集

第4章用编程读入数据建立sas数据集

§4.1 sas编程基本概念

§4.1 概述

sas语言程序由数据步和过程步组成。

sas语言的基本单位是语句,每个sas语句一般由一个关键字(如data,proc,input,cards,by)开头,包含sas名字、特殊字符、运算符等,以分号结束。

sas关键字是用于sas语句开头的特殊单词,sas语句除了赋值、累加、注释、空语句以外都以关键字开头。

sas名字在sas程序中标识各种sas成分,如变量、数据集、数据库,等等。

数据步和过程步

数据步用来生成数据集(从数据片中或外部数据文件中读取数据)、计算整理数据等。

语法:

data 数据集名;

.....;

run;

过程步:面向SAS数据集,完成某个特定的计算、分析和呈现功能

语法:

proc 过程名;

......;

run;

sas程序的书写规则

sas程序是由一至多个数据步骤(data step)和过程步(Procedure Step)互相交叉组合而形成。

根据各个数据步骤的属性或过程步的功能,来实现sas 数据文件的建立、进行统计分析等。

sas系统的编译方式是以数据步或过程步为一个区块来编译的,语法编译无误便开始执行该数据步或过程步,执行完整一个数据步或过程步区块后便继续处理下一个数据步或过程步。一个区块接一个区块地将所有程序代码编译及执行完后,便完成了该程序的执行。sas程序代码提交出去,便已将程序交由sas系统去完成。

用户必须确定sas系统在log窗口中是否有显示错误的程序代码,分析数据的属性是否正确。

sas的程序代码是自由格式的程序代码,每个语句由关键词开始,以“;”作为一个程序语法的结束;

一行可以含多个程序语句;

一个程序语句也可以分成多行,但必须以空格(只要有一个空格的地方,就可用任意多个空格来替代)为分隔。注:在命令框中键入num即可显示或取消行数。

指定逻辑库名与逻辑文件名

指定逻辑库名

在sas系统中只有sas数据集才能被sas过程直接调用,sas数据集的结构和dbf数据库完全相同。sas数据集存储在被称为sas数据库的文件集中,在pc系统中,sas数据库与某一个文件夹相对应,为了避免直接书写较长的实际地址,最好为每一个数据库指定一个库标记(库名)来识别该库,使用Libname命令可以指定库标记。

语法:

libname 逻辑库名'库的物理存储位置';

上述指定的目录,必须在程序执行前就建好,否则无法使用。libname 库名 list;在log窗口显示该逻辑库的连接情况(即列出库名对应的物理置).

libname 库名 clear;取消该逻辑库的设置.

libname _all_ list;显示所有逻辑库的设置. libname _all_ clear;取消所有逻辑库(不包括系统提供的)的设置.

libname逻辑库名(物理位置1 物理位置2…);

为多个物理位置指定同一个逻辑库名.

若多个位置对应一个逻辑库名,则逻辑库的属性中的levels取值为物理位置的个数,在存储文件时,文件存在levels=1的物理位置,调用文件时,系统会自动搜索所有物理位置。

指定逻辑文件名

定义逻辑的文件名称,以供SAS系统程序中使用。

语法:

filename 逻辑文件名'文件的物理存储位置' ;

引用:

逻辑文件名

逻辑文件名(‘文件名’)

注:如指定的文件位置并不存在,系统并不报错,但引用逻辑文件名时,错误的逻辑文件位置会报错。此同逻辑库不同。逻辑文件名可同已有的逻辑库同名,因在不同地方引用,不混淆。

例:

########################################### libname dst 'd:\dst';

libname dst list;

libname dst;

libname dst clear;

libname_all_list;

libname_all_;

libname_all_clear;

filename dst 'd:\data';

filename dst list;

filename dst;

filename dst clear;

filename_all_list;

filename_all_;

filename_all_clear;

########################################### 注:

1 libname dst 'd:\dst';中的文件夹dst要先在window系统中建好,否则无法建立此逻辑库,运行此命令会提示错误;

2 filename dst 'd:\data'; 中的文件夹data也要先在window系统中建好,运行此命令会无错误提示;但引用此逻辑文件名时会提示错误。

§4.1.3查看逻辑库和数据集的属性和内容

查看sas逻辑库的属性和内容

语法:

proc datasets lib=逻辑库名;

run;

查看sas数据集的属性和内容

语法:

proc contents data=数据集名;

run;

输出sas数据集的数据部分

语法:

proc print data=数据集名;

run;

§4.2 用数据步读入(文本文件)数据生成SAS数据集

§4.2.1 数据文件格式与数据步的一般形式

源数据文件格式:

1.字段固定的源数据文件中数据的排列方式:

(1)每行安排一个观测量;

(2)每行各个字段都由相同的列开始.

2.分隔符固定的自由格式的源数据文件

每行可以安排一个或若干个观测量.观测值之间使用分隔符分隔.

或者一个观测量可以占据多行.

输入模式:

按列输入模式格式化输入模式列举输入模式命名输入模式混合输入模式。

转换文本数据文件数据步的一般形式

data 数据集名;

infile 文件名;

input 变量输入设定;

run;

注:

1 数据集名为建立的数据集名,两级命名;

2 源数据文件名,可用逻辑文件名;

3 由源数据文件格式设定设定如何读入源数据文件的某个字段及用什么格式将其存为sas数据集的某个变量。

例:按列输入模式读入外部数据文件

########################################### libname dst ‘d:\dst’;

filename dst 'd:\data';

data dst.indt01;

infile dst(imptdt01);

input id$ age$ actlevel$ sex$;

run;

proc print;

run;

########################################### §4.2.2 按列输入模式

input

变量名1<$> 开始列数-结束列数

变量名2<$> 开始列数-结束列数…

注:

1 变量名:为sas数据集中创建的变量的名称,按指定的大小写存放;

2美元符号$:可选项,创建字符型变量需要;数值型变量无需此选项;

3开始列数:读入字段在源数据行中的开始列数;

4结束列数:读入字段在源数据行中的结束列数;

5对每个要转换的字段都要写出上述信息设定。

例:读入imptdt01.dat的input语句

########################################### input

id 1-4

age 6-7

actlevel $ 9-12

sex $ 14;

########################################### libname dst 'd:\dst';

filename dst 'd:\data';

data dst.indt01;

infile dst(imptdt01);

input id$ 1-4 age$ 6-7 actlevel$ 9-12 sex$ 14;

run;

proc print;

run;

########################################### 注:

1“infile dst(imptdt01);”括号中文件无扩展名和引号引用方式为系统默认方式;

2 可直接用物理地址代替:

infile ‘d:\data\imptdt01.dat’

3 input语句与源数据文件格式密切相关,下在各输入模式中分别介绍其及其选项。

4 变量属性:

name type missing_value length informat format label

proc contents data=dst.indt01;

run;

查看上述建立数据集变量的属性。

注:长度(数值默认8,字符按输入宽度决定长度),输入输出格式都按缺省方式定。

例4.1 imptdt02.dat

###########################################读入,打印显示

libname dst 'd:\dst';

filename dst 'd:\data';

data dst.indt02;

infile dst(imptdt02);

input date $ 1-7 dest $ 8-10 boarded $ 11-13;

run;

proc print;

run;

########################################### 调整字段输入顺序,跳开输入,重复输入。

libname dst 'd:\dst';

filename dst 'd:\data';

data dst.indt02;

infile dst(imptdt02);

input date $ 1-7 dest $ 8-10 boarded $ 11-13 year 6-7;

run;

proc print;

run;

########################################### 注:

按列输入源数据文件的优点

1对字段的选取灵活,可任选字段和安排字段顺序;

2整个字段或部分输入;

3字段间未必要空格或其它分隔符;

4字符变量值最多可含32k个字符,并可用空格;

5 对缺失数据无特殊占位符的要求。一个空格字段就读为一个缺失值,也不引起其它字段读入错误。

按列输入源数据文件的缺点

虽可设定输入长度,但无格式设定,对数值变量只能读入标准数值数据,即由数字,正负号,小数点和E构成的定点和浮点数;

对日期,含美元符号,含逗号和其它字符数据无法准确按格式输入,见上例;

需要格式化输入。

infile语句的选项

infile 文件名

注:

1不写按缺省方式输入;

2调试时可用obs 限制读入行数。

例:

########################################### libname dst ‘d:\dst’;

filename dst 'd:\data';

data dst.indt01;

infile dst(imptdt01) firstobs=2 obs=5;

input id$ age$ actlevel$ sex$;

run;

proc print data=dst.indt01;

run;

########################################### 从数据步中读入数据

data 数据集名;

infile datalines <其他选项>;

input 变量输入设定<选项>;

datalines;

数据行

……

;

run;

注:

1 infile datalines <其他选项> 中若无<其他选项>时,此语句可省;

2 datalines可用cards替代。

§4.2.3格式化输入模式

1适用字段固定格式源文件数据;

2给出开始列数,不给结束列数,由输入格式给出读入长度;

3 可设定输入格式;

4 其它语句同按列输入模式。

input 指针控制变量名1 输入格式变量名2 输入格式…; 指针控制:

@n: 从第n列开始读入(绝对位置), @1可省;

+n: 列控制指针, 增加n列读入(相对位置);

变量名:要创建的变量名;

输入格式:该变量的输入格式。

例:imptdt03.dat

########################################### input @1 lastname $7. 或input lastname $7.

########################################### input lastname $7. @9 firstname $5.

########################################### input lastname $7. +1 firstname $5.

########################################### input lastname $7. @9 firstname $5 @15 jobtitle 3. @19 salary comma9.

###########################################用到的一些格式说明

$charw.:如果需要完全原样地输入字符型数据(包括头尾空格、单独的小数点),可以用有格式输入,即在字符型变量名和$符后加上一个输入格式如CHAR10.表示读入10个字符,并保留读入字符串前的空格符。P41-42

$w.:如果需要完全原样地输入字符型数据(包括头尾空格、单独的小数点),可以用有格式输入,即在字符型变量名和$符后加上一个输入格式如10.表示读入10个字符,并删除读入字符串前的空格符。P41-42

commaw.d:数据一般以包含逗号、空格、-、$的字符串形式出现在卡片或外部数据文件中;读入时系统可自动去掉这些符号。P43

整个读入程序

########################################### filename dst 'd:\data';

data dst.indt03;

infile dst(imptdt03);

input LastName $7. @9 FirstName $5 @15 JobTitle 3. @19 Salary comma9.;

run;

proc print data=dst.indt01;

run;

###########################################注:

1输入格式指定并不记入数据集变量属性中,采取默认的格式;

proc contents data=dst.indt03;

run;

2可任意安排字段输入次序

例4.2 imptdt02.dat

########################################### filename dst 'd:\data';

data dst.indt02;

infile dst(imptdt02);

input date date7. dest $3. boarded 3.;

run;

proc print data=dst.indt02;

run;

###########################################

注:从输出结果看date为数值型的,如何按常用的日期格式输出。

format 变量名1 输出格式变量名2 输出格式……;

########################################### filename dst 'd:\data';

data dst.indt02;

infile dst(imptdt02);

INPUT date date7. dest $3. boarded 3.;

Format date yymmdd10.;

run;

proc print data=dst.indt02;

run;

###########################################注:

1输入格式datew. P46

输入时允许在日月年之间加入空格和其他特殊字符,只要宽度足够,如ddMONyy(yyyy) 17oct91,宽度范围7-12,缺省宽度7;

2输出格式yymmddxw. P46

yy/mm/dd宽度范围2-8,缺省宽度,8, 如91/10/17

3 infile 选项firstobs,obs同按列输入。

§4.2.4列举输入模式

适用于分隔符固定的源数据,如数据文件:imptdt04.dat infile 文件名

input 变量名1 <$> 变量名2 <$>…;

1变量名:要创建的变量名;

2 依次读入数据文件中各字段

3源数据分隔符默认为空格,如源数据是空格分隔,可省

########################################### 空格分隔符

filename dst 'd:\data';

data dst.indt04;

infile dst(imptdt04);

INPUT gender $ age bankcard freqbank deptcard freqdept;

run;

proc print data=dst.indt02;

run;

########################################### 其它分隔符

filename dst 'd:\data';

data dst.indt05;

infile dst(imptdt05) dlm=’,’;

INPUT gender $ age bankcard freqbank deptcard freqdept;

run;

proc print data=dst.indt02;

run;

###########################################注:列举模式输入最简单,但有局限性:

1 字段有至少一个空格或其它分隔符分开;

2 字段自左至右依次读入,不能跳开或重复读入;

3 对字符或数值变量的缺失值要用不同于分隔符的符号表示;

4 由于变量长度缺省为8,超过8的被截断;

proc contents data=dst.indt05

5无法使用输入格式;

6 字符变量中不能含分隔符。

length 变量名1 <$> 长度变量名2 <$> 长度……;

可克服截断

###########################################

Data tem;

Length city $9.

Input city $ pop70 pop80;

Cards;

ANCHORAGE 48081 174431

ATLANTA 495039 425022

BOSTON 641071 562994

CHARLOTTE 241420 314447

;

RUN;

PROC PRINT DATA=TEM;

RUN;

###########################################注:

1 length可放input前或后,若放前,变量类型由length语句定;放后怎样?

2 数据集中变量次序由input中语句定。

带修饰的列举模式输入

input 变量名<$>:输入格式…;

###########################################

libname dst ‘d:\dst’;

filename dst 'd:\data';

data dst.indt06;

infile dst(imptdt06);

input city :$12. pop70:comma9. pop80:comma9.;

run;

proc print;

run;

proc contents;

run;

########################################### 注:

1 不管输入格式如何写,每个字段读入的长度有分隔符定;

2 数据集中变量长度,数值变量长度总是缺省的8,字符变量也是缺省8,但若length语句在input语句前,则按length设定。若length语句未作设定,则就是输入格式规定的读入宽度。

§4.2.5命名输入模式及混合输入模式

命名输入模式

要求数据文件中每个数据行都为各个字段指定变量名,且不便同模式混用。

########################################### data tem;

infile cards;

input name=$10. sex=$1. birthday= height=3.;

informat birthday date7.;

format birthday yymmdd10.;

cards;

name=Alex Bruce sex=M birthday=13Jun67 height=174

birthday=08aug54 sex=F name=Cathy Lee

;

run;

proc print;

run;

注:

1 变量名大小写相同;

2 数据行第2行变量次序可不同input中变量次序;

3 informat 变量名输入格式变量名输入格式…….

########################################### 注:此时用

proc contents data=tem;

run;

查看变量属性informat栏有定义。

########################################### 查看数据变量属性的例子

data test;

input date;

informat date date7.;

format date yymmdd10.;

cards;

01jan99

;

run;

proc print;

run;

proc contents data=test;

run;

########################################### 注: informat语句和format语句要放在input 语句后面,否则有出错提示,如

data test;

input date;

informat date date7.;

cards;

01jan99

;

format date yymmdd10.;

run;

proc print;

run;

proc contents data=test;

run;

########################################### 混合输入模式

源文件不同字段用不同的读入模式

########################################### filename dst ‘d:\dst’;

data mixedimpt;

infile dst(imptdt07);

input ssn $ 1-11 @12 hiredate date7. @20 salary comma6. department : $9. phone_no;

format hiredate yymmdd10. salary dollar7.;

run;

proc print;

run;

###########################################注:

1 日期输入输出格式 datew.,p46;

2 日期输入输出格式 yymmdd 或 yyyymmdd, p46;

3 输入格式 commaw.d, p43;

4 输出格式 commaw.d, p43;

5 输出格式 dollarw.d, p43.

§4.3 用数据步读入数据生成SAS数据集(二)

§4.3.1 数据步的编译和执行

编译阶段:检查语法错误,建立数据集描述部分

●对程序进行语法和词语检查,看是否有错误;

●将程序转化为机器码,供执行阶段使用;

●建立工作部件输入缓冲器;

●建立工作部件pdv(程序数据列program data vector);

●确定数据集中各个变量的三个属性:变量名,类型,长度;

●建立数据集的描述部分。

说明:

●输入缓冲器是一个存储区域,它只反映一个逻辑概念,不一

定反映数据的物理位置.只在读外部源数据时才使用,读sas数据集时并不用.

●pdv是sas建立数据集的存储区域.每次一个观测,它也像输

入缓冲器一样是个逻辑概念. 包含两个自动生成的临时变量,可以在程序中象其它变量一样使用,但不写入数据集。

_n_:纪录数据步开始执行的次数;

_error_:执行过程中若发生错误,值置为1,否则是0。

●也扫描数据步的每个语句:

关键词遗漏或拼法错误

无效的变量名

遗漏或错用标点符号

无效的选项

【原创】如何使用SAS从Excel中读取一系列单元格数据分析报告论文(代码+数据)

咨询QQ:3025393450 欢迎登陆官网:https://www.wendangku.net/doc/9b3081573.html,/datablog 如何使用SAS从Excel中读取一系列单元格数据分析报告 原文链接:https://www.wendangku.net/doc/9b3081573.html,/?p=5211 电子表格不是数据库。但是,我们中的许多人使用电子表格就好像它们是数据库一样,然后当电子表格布局不支持数据库样式严格的可预测行,列和变量类型时,我们就会挣扎- 这是分析和报告所需的基本元素。如果您使用SAS从Microsoft Excel读取数据,当您需要的数据不是从单元格A1开始时,您可以做什么? 通过设计,SAS可以从电子表格中的任何单元格范围读取数据。在本文中,我将介绍如何在PROC IMPORT中使用RANGE语句来获取所需的数据。 对于SAS 9.4及更高版本,SAS建议使用DBMS = XLSX以获得最大的灵活性。它适用于所有操作系统,无需其他组件,如PC文件服务器。您的Excel文件必须采用Excel 2007或更高版本格式(XLSX)。你这样做需要SAS / ACCESS 到PC文件的许可证。(刚刚学习?这些DBMS = XLSX技术也适用于SAS大学版。) 如果您的Excel数据不是从单元格A1(导入过程的默认起点)开始,那么您可以添加包含特定单元格的RANGE =值。最简单的方法是在Excel中使用命名范围来定义数据的确切边界。 如何添加命名范围 要在Excel中定义命名范围,请突出显示要包括的单元格范围,然后只需在“名称框”中键入范围的新名称:

咨询QQ:3025393450 欢迎登陆官网:https://www.wendangku.net/doc/9b3081573.html,/datablog 然后保存Excel文件。 然后要导入SAS,请在RANGE =选项中指定范围名称: proc importdatafile="/myprojects/myfile.xlsx"out=mydatareplace;range="myspecialrange";run; 对单元格区域使用Excel表示 如果您不提前知道范围怎么办?您可以使用PROC IMPORT读取整个工作表,但结果将不包含所需的列标题和类型。考虑这样一张表:

SAS软件对数据集一些简单操作

SAS软件对数据集一些简单操作Libname AA 'd:\SAS'; Data AA.feng; Input a b c; cards; 3 4 56 64 43 34 累加 DATA A; INPUT X Y @@; S+X; CARDS; 3 5 7 9 20 21 ; PROC PRINT; RUN; ; run; DATA D1; INFILE ‘C:FIT.TXT' INPUT NUM $ 1-4 SEX $ 5 H 6-9 W 10-11; RUN; 建立数据集求均值 data a; input name$sex$math chinese@@; cards; 张三男82 96 刘四女81 98 王五男90 92 黄六女92 92 ; proc print data=a; proc means data=a mean; var math chinese; run; 保留列 data b; set a; keep name math; run; 丢弃列 data b; set b;

drop name; run; 条件选择 data c; set a; if math>90 and chinese>90; run; 把超过九十分改为90分data aa; set a; if chinese>90 then chinese=90; run; 筛选行 data aaa ; set a(firstobs=2 obs=3); run; 拆分男女 data a1 a2; set a; select(sex); when('男')output a1; when('女')output a2; otherwise put sex='wrong'; end; drop sex; run; 合并 data new; set a1(in=male) a2(in=female); if male=1 then sex=''; if female=1 then sex=''; run; 纵向合并Set 横向合并merge 重命名rename 改标志label 排序语句 proc sort data=a out=b; by sex;

《SAS数据分析范例》(SAS数据集)

《SAS数据分析范例》数据集 目录 表1 sas.bd1 (3) 表2 sas.bd3 (4) 表3 sas.bd4 (5) 表4 sas.belts (6) 表5 sas.c1d2 (7) 表6 sas.c7d31 (8) 表7 sas.dead0 (9) 表8 sas.dqgy (10) 表9 sas.dqjyjf (11) 表10 sas.dqnlmy3 (12) 表11 sas.dqnlmy (13) 表12 sas.dqrjsr (14) 表13 sas.dqrk (15) 表14 sas.gjxuexiao0 (16) 表15 sas.gnsczzgc (17) 表16 sas.gnsczzs (18) 表17 sas.gr08n01 (19) 表18 sas.iris (20) 表19 sas.jmcxck0 (21) 表20 sas.jmjt052 (22) 表21 sas.jmjt053 (23) 表22 sas.jmjt054 (24) 表23 sas.jmjt055 (25) 表24 sas.jmxfsps (26) 表25 sas.jmxfspzs0 (27) 表26 sas.jmxfzss (28) 表27 sas.jmxfzst (29) 表28 sas.kscj2 (30) 表29 sas.modeclu4 (31) 表30 sas.ms8d1 (32) 表31 sas.nlmyzzs (33) 表32 sas.plates (34) 表33 sas.poverty (35) 表34 sas.rjnycpcl0 (36) 表35 sas.rjsrs (37) 表36 sas.sanmao (38) 表37 sas.sczz1 (39) 表38 sas.sczz06s (40) 表39 sas.sczz (41) 表40 sas.sczzgc1 (42)

SAS学习系列03. 导入数据Ⅰ

03. 导入数据Ⅰ SAS读取的数据的方法主要有以下几种: 1. 直接输入; 表格形式输入数据,可以定义变量、设置属性; 程序编辑器data步中直接输入; 2. 从原始数据文件中创建一个SAS数据集; data步可以读取任何形式的原始数据文件,也可以用导入向导(Import Wizard)、导入过程(IMPORT procedure) 3. 将其他软件中的数据文件转换成SAS数据集; 如果安装SAS/ACCESS模块,可以用导入过程和导入向导将Excel、Lotus、dBase和Access文件导入SAS数据集 4. 直接读取其他软件的数据集; SAS/ACCESS产品可以不用转换数据格式读取数据库管理系统,包括ORACLE,DB2,INGRES和SYBASE的数据;使用Excel engine、Access engine和SPSS engine来读取其数据 (一)直接输入 1.打开【工具】——【表编辑器】,在表编辑器窗口以表格形式 输入数据,可以定义变量、设置属性。(略) 2.data步中直接输入(例如SAS介绍及基础篇中的例1)

(二)用导入向导(Import Wizard)读取文件 步骤: 1.打开【文件】——【导入数据】,调出导入向导窗口; 2.选择要导入的数据类型; 3.指定要导入的文件位置,SAS默认第一行存放变量名,从第二 行开始存放数据(Options可以改变这种默认选择); 4.选择数据集要存放的地址,并为数据集命名; 5.(可选)创建一个proc import语句,可以执行它再次导入这 个数据。 (三)从外部文件导入数据 一、读取空格或分隔符分开的数据 语法: data 数据集名; infile ‘文件路径+文件名’ <可选参数>; input变量1 变量2 …; 注:infile语句告诉SAS外部数据的存放路径和文件名; 示例: data students; infile'c:\MyRawData\Studens.dat' DLM = ','; input Name $ Age Height; 注:这是创建临时数据集work.students,若要创建永久数据集,需要指定二级数据集名称。例如,

SAS数据集操作

目录 SAS 数据集操作 2014年03月28日 1.合并 2.删选,修改 3.查询 PPT 模板下载:https://www.wendangku.net/doc/9b3081573.html,/moban/

1 数据集的合并: (1)纵向合并:添加或合并样本变量 (2)横向合并:添加或合并(指标)变量

(1)数据集纵向合并:可以添加或合并样本变量 形式: data 合并后数据名; set 数据名1 数据名2 ; run; 例:将名为male、female 的两个数据集纵向合并成一个名为total 的数据集data total; set male female; proc print data=total; run; /*若male 与female 变量名不同则total 的变量名为两者之并,数据值以缺失值形式出现*/

(2)数据集横向合并:添加或合并(指标)变量 形式: data 合并后数据名; merge 数据名1 数据名2 ; by 共有变量名; run; 例:将名为dataONE 和data TWO 的两个数据集按共有变量pid 横向合并成数据集total2 (以下程序以data total2 名义保存)

data one; input pid sex$ age; cards; 101 m 54 105 w 36 102 m 43 104 w 45 ; data two; input pid weight height; cards; 105 54 163 102 63 174 103 57 173 104 45 156 ;

proc sort data=one;/*必须先对共有变量(本例中pid)分别排序才能横向合并*/ by pid; /* 排序语句proc sort data=被排序变量所在数据集名; by 被排序变量名;排序时默认数值由小到大字母由先而后*/ proc sort data=two; /*必须先对共有变量(本例中pid)分别排序才能横向合并*/ by pid; /*以下为合并过程*/ data total2; /*合并后数据名*/ merge one two; /*形式: merge 被合并数据集名1 被合并数据集名2; */ 注意输出结果中的缺省值,输入数据时若有缺省分量一定要以. 表示,否则SAS 会将该行数据自行删除*/ by pid; proc print data=total2; run;

SAS系统和数据分析输入输出格式

第五课输入输出格式 一、SAS数据集中变量的类型 SAS共有两种类型的变量: ●字符型变量━━以ASCII码存放,最大长度不超过200字符 ●数据型变量━━以浮点数存放,长度为8个字节 SAS数据集的矩阵式结构要求每个观测的每个变量值都必须存在,因此如果某个数据值缺失,系统会自动补上一个缺失值。对于数字型变量,这个值显示为一个点“.”,而对于字符型变量,这个值显示为空格。 二、输入和输出格式 SAS数据集的数据值的内部存放格式并不一定与该数据值的输入和输出格式一致,这取决于SAS的两个重要功能:输入格式(Informats)和输出格式(Formats)。输入格式指示SAS 系统如何读入数据,而输出格式指示SAS系统如何输出数据。它们的一般形式如下: ●输入格式:<$>informat. ●输出格式:<$>format. 其中,$符号指示这是个字符输入输出格式,没有$符号表示是数值输入输出格式;Informat 是一个输入格式的名字,format是一个输出格式的名字;w是宽度值,对许多输入输出格式这个值是输入输出数据的列数;d在数值输入输出格式中是小数部分的长度;点“.”是所有输入输出格式中必须包含的分隔符,作为名字的一部分。如果在格式中省略w和d值,SAS 系统使用缺省的值。在SAS系统6.12版本中有五类输入格式,字符输入格式共有14种,数值输入格式共有35种;四类输出格式,字符输出格式共有13种,数值输出格式共有41种。 三、日期时间值在SAS系统中的存储 当变量的值表示日期、时间和日期时间时,在这种特殊的情况下,用户还需了解日期时间值在SAS系统中是怎样被存储的。SAS系统存储日期值为: ●1960年1月1日和这个日期之间的天数 例如,1962年3月8日被存储为797(即366+365+31+28+7),1958年10月1日被存储为-457(即-365-31-30-31)。SAS系统存储时间值为:-457 ●从午夜开始到此刻的秒数 例如,8:18存储为29880(8×60×60+18×60)。一个日期时间值存储为1960年1月1日午夜到这个日期时间之间的秒数。例如,1962年3月8日8:18存储为6915960(797×24×360+29880)。SAS系统6.12版本提供了17种日期、时间和日期时间的输入格式,31种输出格式。 四、几种常用的输入输出格式 如表5.1所示。 表5.1 常用的输入输出格式 主要的输入输出格式名描述

SAS介绍和SAS数据集

SAS系统
SAS系统介绍
SAS系统是用于数据分析与决策支持的大
邓 伟 2013.11 wdeng@https://www.wendangku.net/doc/9b3081573.html,
型集成式模块化软件包。 其早期的名称Statistical Analysis Software 统计分析软件→大型集成应用系统 商业智能(BI)和分析挖掘(DM)
1
2
SAS系统是用于决策支持 的大型集成信息系统
SAS系统主要完成以数据为中心的四大任务: 数据访问 数据管理 数据呈现 数据分析
SAS历史
SAS成立于1976年,是全球最大的私人软件公司(预 打包软件),全球十大独立软件供应商之一 1966年 美国北卡州立大学 Jim Barr and Jim
Goodnight
1972年 推出SAS72供大学使用 1976年 创立公司
SAS软件研究所(SAS Institute Inc.) 举办第一个SUGI (SAS Users Group International) 会议 Base SAS 软件上市 与IBM建立合作伙伴关系
3 4
SAS历史
1985 第一个PC DOS SAS System 版本(Base SAS 和SAS/RTERM 软件)取得成功 1986面向个人计算机的SAS/IML 和SAS/STAT 软 件上市 1992
决策支持功能扩展到以下领域:指导性数据分析、临床 试验分析和报告、财务电子表格和英语查询 SAS第一个垂直市场软件:制药行业的临床审查系统上 市
SAS历史
1995 SAS 成为真正的端到端数据仓库解决 方案唯一的供应商,推出Rapid Warehousing Program 1999 美国食品和药品管理局选择SAS开发的 技术,作为接收和归档电子数据的标准
5
6
1

第三课SAS数据集

第三课SAS数据集 一.SAS数据集的结构 SAS数据集是关系型的,它通常分为两部分: ●描述部分——包含了一些关于数据属性的信息 ●数据部分——包括数据值 SAS的数据值被安排在一个矩阵式的表状结构中,见图3-1所示。 ●表的列称之为变量(Variable),变量类似于其它文件类型的域或字段(Field); ●表的行称之为观察(Observation),观察相当于记录(Record)。 变量1 变量2 变量3 变量4 Name Test1 Test2 Test3 观察1 Xiaoer 90 86 88 观察2 Zhangsan 100 98 89 观察3 Lisi 79 76 70 观察4 Wangwu 68 71 64 观察5 Zhaoliu 100 89 99 图3-1 一个SAS数据文件 二.SAS数据集形式 SAS系统中共有两种类型的数据集: ●SAS 数据文件(SAS data files) ●SAS 数据视窗(SAS data views) SAS 数据文件不仅包括描述部分,而且包括数据部分。SAS 数据视窗只有描述部分,没有数据部分,只包含了与其它数据文件或者其它软件数据的映射关系,能使SAS的所有过程可访问到,实际上并不包含SAS 数据视窗内的数据值。 自始自终,在SAS语言中,“SAS数据集”与这二种形式中之一有关。在下面的例子中,PRINT过程用相同方法处理数据集aaa.abc,而忽略它的形式: PROC PRINT DATA=aaa.abc 三.SAS数据集的名字 SAS数据集名字包括三个部分,格式如下: Libref.data-set-name.membertype ●Libref(库标记)──这是SAS数据库的逻辑名字 ●data-set-name(数据集名字)──这是SAS数据集的名字 ●membertype(成员类型)──SAS数据集名字的这一部分用户使用时不必给出。 SAS 数据文件的成员类型是DATA;SAS 数据视窗的成员类型是VIEW 例如上面例子中的aaa.abc这个SAS数据集名字,aaa是库标记,abc是数据集名字,成

sas数据集例题

试 验目的本实验主要练习数据集的导入和导出,建立、删除和保留变量、数据集的合并与拆分,排序、转置等操作。 掌握从已有数据文件建立数据集以及在已有数据集的基础上建立、删除变量; 掌握sas的程序控制的三种基本控制流; 掌握数据数据修正、排序、转置和标准化的过程或语句。 实验内容完成下列各题 一.某班12 名学生3 门功课成绩如下: 用sas的data步建立数据集。 筛选出有一科不及格的学生。 计算每人平均成绩,并按五级制评定综合成绩。 二.教材P141的6,7题。 三.data2_1.sav和data2_2.sav是一组被试(编号1-47)分别做两个量表数据,请把它们合并起来,保存为“量表.sav”,data2_3.sav是另一组被试(编号48-65)做成量表的数据,请把这些数据加到“量表.sav”里,并保存。 1)a1、a5、a30、a43、a49和b2、b6、b19为反向计分,把他们转化为正向。 2)data2_1.sav和data2_2.sav是一组被试(编号1-47)分别做两个量表的 数据,请把它们合并起来,保存为“量表.sav”,data2_3.sa v是另一组被试(编号48-65)做成量表的数据,请把这些数据加到“量表.sav”里,并保存。 3)a1到a25为a量表的第一个维度,a26到a50为第二个维度,b量表只有 一个维度,分别求出三个维度的总分(即所有项目得分相加)。 4)把b量表总分按照从小到大的顺序排列,设置另外一个变量(group),b 量表得分前十名赋值“1”,标签为“高分组”,后十名赋值“3”,标签为“低分组”,其它赋值“2”,标签为“中间组”。 5)各维度总分中如果有缺失,请用该维度的平均分进行替换。

sas读入数据全解析

SAS数据步导入数据终极汇总——经典,一看就会 一、将数据录入SAS——DATA Step / Viewtable 1.Internal raw data- Datalines or Cards 命令; 2.External Raw data files- Infile 命令+ Input 命令; 二、将数据文件读入SAS ——DATA Step / PROC IMPORT 1.将SAS文件读入SAS—— data sasuser.saslin; set "F:\sas1.sas7bdat"; run; proc contents data=sasuser.saslin; run; 2.将其他形式文件导入成SAS ——PROC IMPORT / 直接读入其他形式文件 proc import datafile = "c:\data\hsb2.sav" out= work.hsb2; run; proc contents data=hsb2; run; SAS导入数据:SAS recognizes the file type to be imported by file extension. 对数据长度的限制 在一些操作环境,SAS假定外部文件的纪录对最长为256(一行数据包括空格等所有字符在内的长度),如果预计读入的纪录长度超过256,可在Infile语句中使用LRECL=n 这个命令。 读入以空格作为分隔符的原始数据 如果原始数据的不同变量之间是以至少一个空格作为分隔符的,那可以直接采用List方法将这些数据读入SAS。 List Input读数据非常方便,但也有很多局限性: (1)不能跳过数据; (2)所有的缺失值必须以点代替 (3)字符型数据必须是不包含空格的,且长度不能超过8; (4)不能直接读入日期型等特殊类型的数据。 程序举例: INPUT Name $ Age Height; 读入按列组织的数据

SAS导入数据

SAS培训第一讲 课程:数据的导入和导出 部门:创新业务部 时间:2014/11/19 内容概要: 1.菜单操作 2.Proc import 3.Infile语句 4.Libname 5.批量导入数据(不讲) 6.数据的导出(直接使用菜单方法或proc export,不讲) 7.各种导入方法的优缺点 数据类型:Excel数据,csv数据(逗号分隔符),Access数据 详细讲解: 1.菜单导入数据(只介绍EXCEL数据导入,其他类似) 1)打开导入数据向导,如下图; 2)选择将要导入的数据类型,然后点击“next”; 3)选择将要导入的数据的物理地址,点击“OK”进入下一步; 4)选择将要导入的table,点击“next”; 5)选择将数据导入哪个逻辑库并填入数据集名称,点击“next”; 6)该步让用户选择是否将菜单操作背后的代码导出,若无必要直接点击“Finish”,完成数 据的导入。 2.Import过程步导入数据 1)Excel表格数据 proc import out = index1 datafile = "C:\Users\Administrator\Desktop\399101.xlsx"

dbms = excel replace; range = "sheet1$"; getnames = NO; run; 参数解释: dbms——规定外部文件格式的标示名 replace——规定替换已存在的文件 range——指定将要导入的数据范围 getnames——规定是否将第一行数据作为变量名 2)csv数据 proc import out = import_csv datafile = "C:\Users\Administrator\Desktop\data_lesson1\鞍山20141112.csv" dbms = csv replace; delimiter = ','; getnames = yes; datarow = 2; guessingrows = 4000; run; 参数解释: dbms——规定外部文件格式的标示名 replace——规定替换已存在的文件 delimiter——规定外部文件分隔符 getnames——规定是否将第一行数据作为变量名 datarow——规定从第几行开始读取数据 guessingrows——规定根据前多少条数据确定变量格式 说明: a)对于文件格式的标示名与源文件格式之间的对应关系参《SAS编程技术教程》 b)一般情况都加上replace,以免重新导入数据时出错,当然也可以不加 c)若文件含分隔符,则必须规定delimiter选项 d)当getnames=yes时,datarow应大于1 e)guessingrows最大取值为4000,若缺省此项,SAS默认将第一条数据的格式作为变 量格式。 对于数据量超过4000条的数据最好不要使用proc import导入数据,有可能会导致字符被截断等情况。接下来介绍的infile方法可以解决这一点。 3)Access数据 proc import out = import_ac table = 'content' dbms = access replace; database = "C:\Users\Administrator\Desktop\data_lesson1\SpiderResult.mdb";

SAS系统和数据分析SAS数据集的编辑

第十一课SAS数据集的编辑 通常从外部数据源转换得到SAS数据集后,并不是所有的数据集都满足统计数据要求,可立即调用统计过程进行统计分析。需要对数据集进行满足统计数据要求的编辑或生成新的数据集。 一、增加数据集一个新变量 SAS系统可通过赋值语句把包含操作符的表达式赋值给数据集所要创建的新变量。SAS 的表达式中还可以包含SAS函数,如一些常用的SAS函数见下表: 函数分类常用函数功能 数学运算函数ABS( ) 取绝对值 SQRT( ) 求平方根 INT( ) 取整数部分 EXP( ) 计数e的次幂 LOG( ) 求e为底的自然对数SIN( ) 计算正弦 LAGn( ) 求给定变量滞后为n的值 统计计算函数MAX( ) 求最大值 MIN( ) 求最小值 MEAN( ) 求平均值 SUM( ) 求和 DIFn( ) 求给定变量X的第n阶差STD( ) 求标准差 PROBNORM( ) 标准正态分布函数 日期时间处理函数DA TE( )/TODAY()取当日的日期值DAY( ) 计算某月的那一日HOUR( ) 计算小时 TIME( ) 取当日的时间YEAR( ) 取年值 字符函数INDEX( ) 搜寻字符串的位置LEFT( ) 字符串表达式左对齐SUBSTR( ) 抽取子字符串TRIM( ) 移走尾部空格LENGTH( ) 给出字符变量的长度UPCASE( ) 转换为大写 财政金融函数COMPOUND( ) 计算复利 IRR( ) 计算内部赢利率 NPV( ) 计算净现值 SA VING( ) 计算定期储蓄的本金和利息

例如,有一个学生成绩数据集中的数据来源写在CARDS语句后,但我们还需产生新的变量平均分和总分,数据步的程序如下: Data class2 ; Input id test1-test5 ; average=mean(test1,test2,test3,test4,test5); total=test1+test2+test3+test4+test5; Cards ; 980801 100 100 100 100 100 980802 90 100 90 100 90 980803 81 82 83 84 85 Proc print data=class2 ; Run ; 在OUTPUT窗口中显示的运行结果见图11.1所示。 图11.1 用赋值表达式创建数据集的新变量 二、选择数据集的变量和观测 数据库的三种基本操作是选择、投影和连接,如果我们把数据库看成是一张表格,选择和投影操作相当于从一张大的数据库表格中挑选所需的行和列形成一张小的数据库表格。连接操作相当于把两张或两张以上的数据库表格按某种规则合并成一张数据库表格。原始数据库表格可以是外部数据文件(用INFILE语句输入),或在作业流中(用CARDS语句输入),或来自其他SAS数据集(用SET语句输入)。 1.选择变量(即选择列) 使用DATA语句的DROP=和KEEP=选项可以控制从原始数据库中读出的变量是否被写入将要创建的数据集。

第4章 用编程读入数据建立SAS数据集

第4章用编程读入数据建立sas数据集 §4.1 sas编程基本概念 §4.1 概述 sas语言程序由数据步和过程步组成。 sas语言的基本单位是语句,每个sas语句一般由一个关键字(如data,proc,input,cards,by)开头,包含sas名字、特殊字符、运算符等,以分号结束。 sas关键字是用于sas语句开头的特殊单词,sas语句除了赋值、累加、注释、空语句以外都以关键字开头。 sas名字在sas程序中标识各种sas成分,如变量、数据集、数据库,等等。 数据步和过程步 数据步用来生成数据集(从数据片中或外部数据文件中读取数据)、计算整理数据等。 语法: data 数据集名; .....; run; 过程步:面向SAS数据集,完成某个特定的计算、分析和呈现功能 语法: proc 过程名;

......; run; sas程序的书写规则 sas程序是由一至多个数据步骤(data step)和过程步(Procedure Step)互相交叉组合而形成。 根据各个数据步骤的属性或过程步的功能,来实现sas 数据文件的建立、进行统计分析等。 sas系统的编译方式是以数据步或过程步为一个区块来编译的,语法编译无误便开始执行该数据步或过程步,执行完整一个数据步或过程步区块后便继续处理下一个数据步或过程步。一个区块接一个区块地将所有程序代码编译及执行完后,便完成了该程序的执行。sas程序代码提交出去,便已将程序交由sas系统去完成。 用户必须确定sas系统在log窗口中是否有显示错误的程序代码,分析数据的属性是否正确。 sas的程序代码是自由格式的程序代码,每个语句由关键词开始,以“;”作为一个程序语法的结束; 一行可以含多个程序语句; 一个程序语句也可以分成多行,但必须以空格(只要有一个空格的地方,就可用任意多个空格来替代)为分隔。注:在命令框中键入num即可显示或取消行数。 指定逻辑库名与逻辑文件名

SAS将proc步的输出导出为数据集

SAS将proc步的输出导出为数据集 sas的各种proc步,例如corr univariate,运行完之后都会在结果(result)与输出(output)中显示,下面的方法是将proc步的输出变成sas数据集。 需要用到ods语句 ods listing close;该语句的作用是使得proc步的输出不在output中显示 ods results off;该语句的作用是使得proc步的输出不在results中显示 proc univariate data=sashelp.class; var age; run; ods results on; proc步结束后重新打开results和listing ods listing;

ods output语句的功能是将输出窗口output的输出对象转化成sas数据集,使用如下: ods listing close; ods results off; ods output basicmeasure=bm; proc univariate data=sashelp.class; var age; run; ods results on; ods listing; 该程序的作用是将proc过程的基本测度对象basicmeasure 输出到数据集bm中。 可以通过ods trace语句知道输出管道的对象: ods listing close; ods results off;

ods trace on; proc univariate data=sashelp.class; var age; run; ods trace off; ods results on; ods listing;

SAS数据步data step和数据array编程效率

Paper CC-17 Arrays – Data Step Efficiency Harry Droogendyk, Stratia Consulting Inc., Lynden, ON ABSTRACT Arrays are a facility common to many programming languages, useful for programming efficiency. SAS? data step arrays have a number of unique characteristics that make them especially useful in enhancing your coding productivity. This presentation will provide a useful tutorial on the rationale for arrays and their definition and use. INTRODUCTION Most of the row-wise functionality required for data collection, reporting and analysis is handled very efficiently by the various procedures available within SAS. Column-wise processing is a different story. Data may be supplied in forms that require the user to process across the columns within a single row to achieve the desired result. Column-wise processing typically requires the user to employ the power and flexibility of the SAS data step. Even within the SAS data step different methods with varying degrees of coding and execution efficiency can be employed to deal with column-wise processing requirements. Data step arrays are unparalleled in their ability to provide efficient, flexible coding techniques to work with data across columns, e.g. a single row of data containing 12 columns of monthly data. This paper will cover array definition, initialization, use and the efficiencies afforded by their use. DEFINING ARRAYS Array definition in SAS is quite different than most other computer languages. In other languages, arrays are typically a temporary container that holds single or multi-dimensional data that has convenient indexing capabilities which may be used to iterate over the data items within, or to directly reference specific items. SAS’s _temporary_ array structures are most like the definitions found in other languages, but SAS provides so much more array functionality than found in other languages. The basic array definition statement is as follows: ARRAY array_name (n) <$> array-elements <(initial-values)>; - array_name any valid SAS variable name - (n) number of array elements ( optional in some cases ) - $ indicates a character array - length length of each array element ( optional in some cases ) - array-elements _temporary_ or SAS variable name(s) or variable lists ( optional ) - initial-values array initial values SAS arrays must contain either numeric or character data, not a mixture of both. TEMPORARY ARRAY DEFINITION Temporary arrays provide convenient tabular data stores which persist only while the data step is executing. The “variables” created by the temporary array are automatically dropped from the output dataset. Temporary arrays are often used to act as accumulators, store factors etc.. when the items being referenced are not required to be stored with the data. Temporary arrays are automatically retained across data step iterations, i.e. the element values are not set to missing at the top of the data step like most other data step variables. array factors(12,3) _temporary_ ; array desc(12) $15_temporary_ ; The first statement defines a two-dimension numeric array. The second, a 12 element character array, each element 15 bytes in length.

SAS学习系列10. 合并数据集

10.合并数据集 一、用SET 语句拼接合并数据集 用SET语句可以把两个数据集拼接合并在一起,适用于两个数据集具有相同的变量。 基本形式为: data 新数据集名; set 旧数据集1 旧数据集2; 注:(1)按原来顺序合并成新数据集(数据集1在上,2在下); (2)若一个数据集包含了另一个数据集没有的变量,那么合并后,该变量下将会出现缺省值。 例1路径“C:\MyRawData\”下有关于娱乐公园南北门游客的数据South.dat 和North.dat,都包括变量Entrance、PassNumber、PartySize、Age,后者多了一列Lot(停车): 先分别读入数据存为数据集再合并成一个新数据集,并创建了新变量,AmountPaid.

代码: data southentrance; infile'c:\MyRawData\South.dat'; input Entrance $ PassNumber PartySize Age; proc print data = southentrance; title'South Entrance Data'; run; data northentrance; infile'c:\MyRawData\North.dat'; input Entrance $ PassNumber PartySize Age Lot; proc print data = northentrance; title'North Entrance Data'; run; data bothentrance; set southentrance northentrance; if Age =.then AmountPaid =.; else if Age < 3then AmountPaid = 0; else if Age < 65then AmountPaid = 35; else AmountPaid = 27; run; proc print data = bothentrance; title'Both Entrances'; run; 运行结果:

SAS软件建立与管理SAS数据集

建立与管理SAS数据集 ●用窗口建立SAS数据集(VT 、INSIGHT) ●从SAS系统的文件菜单里使用IMPORT与EXPORT进行SAS数据集 与流行的数据库进行转换 ●用DATA步语句建立SAS数据集 1.DATA语句及其选项的使用(知识点) 1.1字符变量的录入与数值型变量在录入时的区别; 1.2日期型变量录入的规则; 1.3类似会计里的习惯表达方式的了解与掌握; 1.4掌握INFORMAT与FORMAT语句的使用; 1.5掌握LABEL语句的使用; 1.6掌握TITLE与FOOTNOTE语句的使用; 1.7如何除去观测号; 1.8如何定义列格式录入; 1.9缺失值的处理; 2.INPUT语句及其选项的使用(知识点) 2.1列格式的读取(数据中有空格); 2.2从其他文本文件中读取数据(INFILE语句的使用); 如:INFILE ‘E:\DATA-HW\DCW.TXT’;

?如何选择读入的数据(FIRSTOBS与OBS) ?INFILE 语句要位于INPUT语句前 2.3自由录入格式; 2.4 LENGTH语句的使用。如 LENGTH NAME $12; 如果变量值太长时使用。 2.5如何产生一个新的变量;并且给新变量赋值。 3.PRINT语句的使用 PROC PRINT DATA=SAS-data-set

相关文档