The SAS little book 中文版 学习

第一章 SAS 软件入门

1.1SAS 语言

  • SAS 程序就是一个按顺序执行的语句序列,一个语句给 SAS 下达信息和指令,且必须要正确的安放
  • 每一个 SAS 语句都由一个分号结尾
  • SAS 程序布局:
    • 不区分大小写。
    • 一条语句可以持续到第二行(只要不把一个单词分开)
    • 几条语句可以用一行
    • 可以在任何一列中开始一条语句
  • 注释的方法:
    • 是星号和;号;
    • 一种是用/* */表示,不能放在第一列

1.2SAS 数据集

  • 变量和观测值:SAS 数据集也被叫做表、观测值也被叫做行、变量也被叫做列
  • 数据类型:只有两种数据类型——数值型和字符型
    • 数值型完全是数据,可以被加减乘除、可以是正负且是小数
    • 字符变量是
      除数值之外的类型,可以是数值、字母、和一些特殊的字符(¥、!),最多可以占用 32767
      个字节长度
    • 如果一个变量既包括数字又包括字符,那么它一定是字符变量。如果只包括数字,可能是字
      符变量也可能是数值变量
  • 缺失值
    • 字符变量的缺失值用空格表示,
    • 数值变量的缺失值用句号(.)表示
  • SAS 数据集的大小
  • SAS 命名规则
    • 名字的长度要小于等于 32 个字节
    • 以字母或下划线开头
    • 可以包含字母、数字、或者是下划线,不能是%$!*&#@
    • 可以是小写或大写字母,且不区分大小写
  • SAS 数据集储存的文件

1.3 SAS 程序的两个过程

  • SAS 程序有两个基本模块:数据步和过程步
    • 由数据步创建 SAS 数据集开始,再由过程步分析数据 在这里插入图片描述
    • 记住数据步负责读取、修改数据,过程步负责分析数据、输报告和效用函数
    • 数据步由 DATA 语句开始:data+数据名
      • 为了读取外部数据、未加工的数据,数据步提供了 DO LOOPS,IF-THEN/ELSE,以及一些数值和字符函数。数据步也可以按照你想要的方式合并数据集,包括联接(concatenation)和合并(match-merge)
    • 过程步由 proc 语句开始 proc+过程名(print、sort、means…)
      • SAS 过程步可以处理从数据储存、输出到方差分析、3D 图表的一切操作
  • 当遭遇 DATA\PROC 等标志着新程序开始的语句时,程序结束。如果运行的是批处理,则 run 代表语句的结束。当 proc 出现时,代表 data 过程结束。
  • 典型的程序是以 DATA 语句开头,输入或修改数据,然后将数据传递给 PROC 语句。可用任何顺序来排列 data 和 proc 两者
    的顺序,一个程序甚至可以仅有 data 语句或 proc 语句。
  • data 语句和 proc 语句的一些基本不同点:
    在这里插入图片描述

1.4 数据步的内置循环

  • 数据步按照一行一行、一个观测值一个观测值的顺序执行
    在这里插入图片描述

1.5 选择一个提交程序的方式

  • SAS 视窗环境
  • SAS 企业向导
  • 非交互式模式
  • 批处理或后台模式
  • 远程提交
  • 交互行模式

1.6 SAS 视窗环境中的视窗和命令

  • SAS 视窗
    • 五种基本的视窗(窗口):结果视窗、资源管理器视窗、和三种程序视窗:程序编辑、日志、输出
      在这里插入图片描述
  • SAS 命令 :为了不同的任务,你有三种方式发出命令:菜单、工具栏、SAS 命令栏
    在这里插入图片描述

1.7 在 SAS 视窗环境中提交程序

  • 将你的程序放入编辑窗口中
  • 提交你的程序

    在这里插入图片描述
  • 访问 SAS 日志和输出 提交程序后,日志窗口和输出窗口会有相应的日志和结果显示,如果你使用的是增强型编辑窗口,之前的程序会保留,如果使用的是程序编辑窗口,之前的程序不会保留。
  • 取回你的程序:需要再次运行时,对于程序编辑窗口,由于之前的程序不在保留,因此需要调回命令(recall),有两种方法:

1.8 阅读 SAS 日志

在这里插入图片描述

1.9 输出窗口中浏览结果

1.10 创建 HTML 输出

  • 如果使用的是 SAS 视窗环境,那么可以为结果创建超文本标记语言(HTML)格式。

1.11 SAS 数据的逻辑库

1.12 用 SAS 资源管理器访问 SAS 数据集

1.13 使用 SAS 系统选项

  • 四种方法可以指定系统选项的参数,SAS 帮助文档会告诉你哪种适合你的操作系统
    • 1系统管理员会创建一个包含了系统选项设定的配置文件,每次 SAS 启动时都会访问这个文件。
      -2 在启动 SAS 之后,根据系统提示指定系统选项
    • 3如果使用 SAS 视窗环境,可以从 SAS 系统选项中改变已选择的选项
    • 4使用 OPTIONS 语句
      • OPTIONS 语句是 SAS 程序的一部分,并可影响之后的所有语句。
      • 由OPTIONS关键词开头,后面是相关选项:OPTIONS LINESIZE=80 NODATE
      • OPTIONS 语句既不属于数据步也不属于过程步,这个全局变量可以出现在程序的任何部分,但放在开头最有意义,你可以很容易看到哪些选项在发挥作用。
    • 方法3,4最好。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

第二章将你的数据放入 SAS

2.1 将你的数据放入 SAS 的方法

  • 1直接输入;
    • Viewtable 窗口以表格形式输入数据,可以义变量、设置属性,如 name、length和 type(character or numeric
    • SAS 企业向导模块
    • SAS/FSP 模块 Full Screen Product 的简称,设计定制的数据输入窗口,检测数据输入错误
  • 2从原始数据文件中创建一个 SAS 数据集(creating SAS data sets from raw data files);
    • 数据步可读取任何形式的原始数据文件,这种方法还将在 2.4 中详解。
    • 导入向导(Import Wizard)、导入过程(IMPORT procedure)适用于 UNIX、OpenVMS 和Windows 操作环境的简单方法,可以读取 CSV(comma-separated values)和其他一些限定的文件类型
  • 3将其他软件中的数据文件转换成 SAS 数据集;
    • 如果安装 SAS/ACCESS 模块,可以用导入过程(import procedure)和导入向导(Import Wizard)将 Excel、Lotus、dBase 和 Access 文件导入 SAS 数据集,见 2.3 和 2.17
    • 如果没有安装,可以用存放数据的软件创建一个原始文件,并用数据步或导入过程(import procedure)读取。很多软件都可以创建 CSV 文件
    • Windows 操作环境下也可以用动态数据交换技术(Dynamic Data Exchange,DDE),见2.18。前提是必须有一个其他的 Windows 程序与 SAS 同时运行,再使用 DDE 和数据步
  • 4 直接读取其他软件的数据集;
    • SAS/ACCESS 产品可以不用转换数据格式读取数据,并适用于大部分大部分数据库管理
      系统,包括 ORACLE,DB2,INGRES 和 SYBASE(但使用方法本书没有介绍)。
    • 使用 Excel engine 和 Access engine 来读取这两种类型的数据。(SAS 帮助文档)
    • 还有其他的一些数据引擎(data engines)来读取数据,如 SPSS engine(附录 D),查找
      帮助文档找到适合你操作环境的所有有效 engine。

2.2 用 Viewtable 窗口输入数据

  • 调用 Viewtable 窗口,在工具栏的下拉菜单中选择表编辑器(Table Editor)。
    -
  • 列属性窗口
    -
  • 输入数据
  • 保存表
  • 打开一个已有的表
  • 其他功能:括排序、打印(printing)、增加和删除行、一次浏览一行(窗体视图 Form View)、一次浏览多行(表视图 Table View)
  • 在 SAS 程序中使用表:
proc print DATA =Sasuser.coffee;
run;

2.3 用导入向导(Import Wizard)读取文件

2.4告诉 SAS 你的原始数据在哪

  • 内部原始数据
    • 直接将数据输入 SAS 程序中,那么数据就是 SAS 内部数据
    • DATALINES是一个指示,告诉 SAS 下面跟着是数据行,直到分号结尾,这个分号可以另起一行,也可以接在数据的后面。也可以用 card 代替 DATALINES.
      在这里插入图片描述
  • 外部原始数据
    • 数据外 SAS 程序外部时,使用 INFILE 语句告诉 SAS 外部数据的文件名和存放路径,它在 data 语句之后,在 INPUT 语句之前。INFILE 后面的文件名和路径要用引号,各种系统的引用方式各不同:
    • 在这里插入图片描述
  • SAS 日志
  • 过长记录:LRECL
INFILE’c:\MyRawData\President.dat’LRECL=2000;

2.5 list input 读取空格分开的原始数据

  • 限制:必须读取所有的数据记录,不能跳过某些值、缺失值必须用句号“.”代替。字符串数据不能包含空格、长度不能超过 8 个
    字符。不适用于数据文件包含日期变量或者其他需要特别处理的变量
  • 在 INPUT 关键词之后列出变量名(按照变量在文件中出现的顺序),变量名长度在 32个字节(含)以下,只能包含字母、下划线和数据,并必须以字母或者下划线开头。如果变量是字符串,后面要价“$”号,值与值之间至少有一个空格,语句要以分号结束。
INPUT Name $ Age Height

2.6 column input 读取按固定列排列的原始数据

  • 当每个变量的值都出现在数据行的相同位置时,并且变量值是字符串或者标准数值(只包含数据、小数点、正负号、和科学标注的 E。逗号和日期都不能算)时,可以使用 column input 来读取。

  • 相比 list input,column input 有如下优势:

    • 不要求变量值之间的空格
    • 缺失值可以直接用空格代替
    • 字符串中可以包含空格
    • 可以跳过不需要的变量
  • 原始数据:
    在这里插入图片描述

DATA sales;
	INFILE 'G:\SAS\Sasdata\columninput.txt';
	INPUT VisitingTeam $ 1-20 ConcessionSales 21-24 BleacherSales 25-28 OurHits 29-31 TheirHits 32-34 OurRuns 35-37 TheirRuns 38-40;
PROC PRINT DATA = sales;
	TITLE 'SAS Data Set Sales';
RUN;
  • 结果:

在这里插入图片描述

  • 解释:原始表间有空格,表示读取1-20的位置的数,21-24位置的数,25-28位置的数,没有空格会导致读取不出来

2.7 informats 读取非标准格式的原始数据

  • 当数据不全是字符串或者数值,
    • 如类似 1,00,001 这样包括逗号的字符串值
    • 美元符号、十六进制、压缩十进制
    • 日期是最普通的非标准数据,
  • Informats 的三种普遍格式为:字符串、数值、日期
    在这里插入图片描述
    • $代表是字符串、informats 代表形式(比如日期的 MMDDYY)、w 是宽度、d 是小数点的位数、
      最后是句号“.”,缺少句号会使得 SAS 把形式(如 MMDDYY)当做变量名
  • 格式:
INPUT Name $ 10.  Age 3 . Height 5.1 BirthDate MMDDYY10.;
  • 解释:Name 为字符串变量,占据 10 个宽度,即列位置从 1-10;age 为数值变量,占据 3 个宽度,列位置从 11 到 13;height 也为数值变量,占据 5 个宽度,包括了 1 位小数点和小数点本身,列位置从 14-18(如 150.3);最后是日期变量,从第 19 列开始,形式为 MMDDYY
  • 例子:
    因为手动数着空格敲数据 ,所以只敲了一行因为手动数着空格敲数据 ,所以只敲了一行
DATA context;
	INFILE 'G:\SAS\Sasdata\informats.txt';
	INPUT Name $16. Age 3. +1 Type $1. +1 Date MMDDYY10. (Score1 Score2 Score3 Score4 Score5)(4.1);
PROC PRINT DATA = context;
	TITLE 'SAS Data Set Sales';
RUN;	
  • 结果:
    在这里插入图片描述
  • 解释:
    年龄后面的+1 代表跳过一列,即原始数据中年龄后面有一个空格。最后的 5 个变量score1-score5,都要求有同样的形式,4.1。将变量名和形式分别放在两个括号集中,可以一次性定义很多变量

2.8 可选择变量形式

一般使用的变量形式的定义,以及它们的宽度范围和默认宽度如下:

在这里插入图片描述
在这里插入图片描述

2.9 混合读取方式

  • list 最简单,column 和 formatted 虽然复杂但是不要求变量之间的空格,并且变量名中可以包含变量,而且 formatted 可以读取特殊的数据比如日期
  • 数据
    在这里插入图片描述
DATA nationalparks;
	INFILE 'G:\SAS\Sasdata\formatted.txt';
	INPUT ParkName $ 1-22 State $ Year @40 Acreage Comma9.;
PROC PRINT DATA = nationalparks;
	TITLE 'Selected National Parks';
RUN;
  • 结果
    在这里插入图片描述
  • 解释
    • ParkName 是 column 方式读取,State 和 Year 是 list 方式读取,Acreage 是 formatted 方式读取
    • 混合读取方式有时会遇到问题:SAS 通过一个指示器标注位置,来读取原始数据的一行,但每种读取方式对指示器的使用稍有不同。List 方式下,SAS 自动找到非空格区域并开始读取;column 方式下,SAS 读取你所指定的特定位置;informatted 方式下,SAS 不理会指示器的标准,只是依次的读取。这时,就会需要列指示器@n,来人为的让 SAS 的读取直接跳至某列。在上面的程序中,列指示器@40 告诉 SAS 在读取 Acerage 变量之前,移动到第 40 列去
    • Comma9 告诉 SAS 读取 9 列,SAS 就会读取包括空格在内的 9 列,这便会导致输出结果的问
      题。

2.10 读取凌乱的原始数据

数据排列混乱,长度不一:

  • @’character’ 列指示器:
    • 只知道品种号跟随在单词 breed 后面
      • 格式:
      Input @’Breed:’ DogBreed $;
      
  • colon modifier
    • input 读取字符串变量默认为 8 个字符;
    • 名(dogbreed)超过 8 个字符,则需要定义长度,定义为 l e n g t h . S length,在该长度中,空格也算在内.S 读取过程中遇到空格则不再继续读取,则要在 length 前面加冒号“:”
    My dog Sam Breed:Rottweiler Vet Bills:$478
    

-

  • 例子
  • 数据
    在这里插入图片描述
DATA weblogs;
	INFILE 'G:\SAS\Sasdata\2.10.txt';
	INPUT @ '[' AccessDate DATE11. @'GET' File :$20.;
PROC PRINT DATA = weblogs;
	TITLE 'Dog Care Web Logs';
RUN;
  • 结果
    在这里插入图片描述
  • 解释:
    @’[’作为列指示器,告诉 SAS 读取[之后的内容,@’GET’告诉 SAS 读取 GET 之后的内容,由于文件名作为字符串变量,这里基本都会超过 8 个字节,因此后面附加:$20。

2.11 跨行观测值的读取方式

  • 说明:
    • 行指示器,斜线/:告诉 SAS 跳至原始数据的第二行
    • #n:跳至第 n 行,n 代表原始数据中某观测值的行数(#2 则让 SAS 跳至某观测值的第二行),#n 不能用来回跳
  • 例子
  • 数据
    Nome AK
    55 44
    88 29
    Miami FL
    90 75
    97 65
    Raleigh NC
    88 68
    105 50
DATA highlow;
	INFILE 'G:\SAS\Sasdata\211.txt';
	INPUT City $ State / NormalHigh Normallow 
		  #3 RecordHigh Recordlow;
PROC PRINT DATA = highlow;
	TITLE 'High and low tenperatures for JULY';
RUN;
  • 结果:
    在这里插入图片描述
  • Input 后面告诉 SAS 读取第一行的 city 变量和 state 变量,斜线/告诉 SAS 移动到下一行的第一列,以便读取 normalhigh 和 normallow。#3 告诉 SAS 移动到第三行的第一列以便继续读取观测值的 recordhigh 变量和 recordlow 变量。这里/可以用#2 代替,也可以用/代替#3。

2.12 一行有多个观测值的原始文件读取

  • 当一行出现多个观测值时,可以在 input 语句结尾加一个停止符号@@
    在这里插入图片描述
    • 如导入:
      Nome AK 2.5 15 Miami FL 6.75
      18 Raleigh NC . 12
DATA rainfall;
	INFILE 'C:\Users\37596\Desktop\sas.dat';
	INPUT City $ State $ Normation MeanDaysRain @@;
proc PRINT DATA = rainfall;
	TITLE 'Normal Total Precipitation and';
	TITLE2 'Mean Days with Precipitation for July';
RUN;

结果:结果:

2.13 读取原始数据的部分观测值

在这里插入图片描述

  • 在 SAS 读取某一行观测值时,首先读取足够的变量以便决定是否需要保留此行的观测值。然后在 input 语句结尾加符号@,叫做 a trailing at(called a trailing at),这告诉 SAS 先停在(hold)此行,同时用 IF语句检测此观测值是否满足需要,如果是,那么可以再用一个 input 语句来读取现有的变量.
  • 例子:只需要freeway的数据
    原数据:
    在这里插入图片描述
* use a trailing @ ,then delete surface streets;
DATA freeways;
	INFILE 'D:\SAS learnning\traffic.dat';
	INPUT Type $ @;
	IF Type ='surface' THEN DELETE;
	INPUT Name $ 9-38 AMTraffic PMTraffic;
PROC PRINT DATA = freeways;
	TITLE 'Traffic for Freeways';
RUN;

第一个 input 读取字符串变量,@是 SAS 停留在观测值上并用 IF 检测,第二个 input 读取 input后面的变量值结果
疑问:9-38 什么意思??
结果:
在这里插入图片描述

  • @ vs @@
    • @的作用类似于@@,都是行停留指示符(line-hold specifiers),不同地方在于停留多久
    • @能使 SAS 停留到下一个 input 语句(也不换行),
    • @@能使停留的时间到下一个data 步(也不换行)
      例子:
data test;
 infile cards;
 input x @;
 input y;
 input z @@;
cards;
1 2 3 4 5 6 
7 8 9 10 11 12
13 14 15 16 17
;
proc print data=test;
run;

结果:
在这里插入图片描述
解释:
x取1 有一个@,不换行;故y接着读入2,y后没有@则换行,z读入7,z后两个@@不换行,x接着读入8,同理,不换行y读入9,换行z读入13.

发布了6 篇原创文章 · 获赞 0 · 访问量 330

猜你喜欢

转载自blog.csdn.net/linph174/article/details/105178278
SAS
今日推荐