SAS的Iml的基本格式及用法

SAS的Iml的基本格式及用法,第1张

基本格式是矩阵。

用法如下:

要交互运行SAS/IML,只要在程序窗口输入

proc iml;

reset print;

提交此程序,就可以进入交互的SAS/IML运算状态。退出用QUIT语句

AS/IML是SAS提供的一个可以进行矩阵运算编程的工具。它可以用来进行交互的矩阵运算,也可以编好一个程序再一起运行。程序可以使用分支、循环、模块化子程序等控制结构。数据步中的函数大都能在SAS/IML中使用,SAS/IML 也提供了一些特有的函数。SAS/IML的一个方便之处是它可以直接读取SAS的数据集并把结果写成SAS数据集,它也有存取外部文件的功能。

1)有两种注释方法,一种是号和;号;一种是用/ /表示,注意第二种注释方法不能放在第一列

2)错误 SAS程序通常将执行的错误标注为醒目的红色字母,你可能忘了分号,拼错了字母,按错了键盘,一个小错误会使得整个程序无法运行。当你看到红色部分多余黑色部分的时候,不要灰心。

3)SAS数据集也被叫做表、观测值也被叫做行、变量也被叫做列

4)字符变量的缺失值用空格表示,数值变量的缺失值用句号()表示

5)为变量和数据集命名时要遵守如下规则:

名字的长度要小于等于 32 个字节。

以字母或下划线开头。

可以包含字母、数字、或者是下划线,不能是%$!@。

可以是小写或大写字母,且不区分大小写。

6)SAS程序有两个基本模块:数据步和过程步。

一个典型的SAS程序,由数据步创建SAS数据集开始,再由过程步分析数据。这里有一个例子:数据步中将米转化成千米,过程步中输出结果

DATA step

DATA distance;

Miles = 2622;

Kilometers = 161Miles;

PROC step

PROC PRINT DATA = distance;

RUN;

数据步和过程步由语句组成(废话),一个过程少至1条语句、多至几百条。新手常犯的错误是将两种过程语句用混,只要记住数据步负责读取、修改数据,过程步负责分析数据、输出报告和效用函数,就不会犯错。

数据步由DATA语句开始:data+数据名。上例中数据步处理了名为distance的数据。为了读取外部数据、未加工的数据,数据步提供了DO LOOPS,IF-THEN/ELSE,以及一些数值和字符函数。数据步也可以按照你想要的方式合并数据集,包括联接(concatenation)和合并(match-merge)。

过程步由proc语句开始:proc+过程名(print、sort、means…),SAS过程步可以处理从数据储存、输出到方差分析、3D图表的一切 *** 作。

典型的程序是以DATA语句开头,输入或修改数据,然后将数据传递给PROC语句。但并不一定非要用这种模式来混合data和proc语句,你可以用任何顺序来排列data和proc两者的顺序,一个程序甚至可以仅有data语句或proc语句。

下面是data语句和proc语句的一些基本不同点:

DATA steps

begin wit DATA statements

read and modifu data

create a SAS data set

PROC steps

begin with PROC statements

perfrom specific analysis or function

produce results or report

7)数据步按照一行一行、一个观测值一个观测值的顺序执行

数据步“一行一行的执行”,这句话很好理解。但很多新手还是容易在这里出错,例如在没有创建一个变量之前就使用它,如果Z变量是X、Y两个变量组合的新变量,那么必须确定创建Z变量的语句在创建X、Y变量语句之后。

而“一个观测值一个观测值的执行”就不是那么容易理解。这意味着SAS先读取一个观测值,然后对这个观测值进行数据步的所有语句(当然也是一行一行的),然后再读取第二个观测值执行。每次执行SAS只有一个观测值。

8)SAS读取的数据的方法主要有以下几种类型:

直接输入;

从原始数据文件中创建一个SAS数据集(creating SAS data sets from raw data files);

将其他软件中的数据文件转换成SAS数据集;

直接读取其他软件的数据集;

9)内部原始数据

如果直接将数据输入SAS程序中,那么数据就是SAS内部数据。DATALINES是一个指示,告诉SAS下面跟着是数据行,直到分号结尾,这个分号可以另起一行,也可以接在数据的后面

10)外部原始数据

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

Windows: INFILE 'C:\Mydir\Presidentdat';

UNIX: INFILE '/home/mydir/presidentdat';

OpenVMS: INFILE '[usernamemydir]presidentdat';

OS/390 or z /OS INFILE 'MYIDPREDIDENDAT';

11)SAS日志

读取外部数据时,SAS日志会给一些很有用的信息,检查这些信息可以解决一些问题,比如对比INFILE语句读取的记录数和数据集中实际观测值,可以确定SAS是否正确的读取了数据

12)过长记录

在一些 *** 作环境中,SAS假定外部数据文件的记录长度为256或更少(记录长度是指某行中的字符数,包括空格),如果长度过长,SAS不能读取全部,此时需要在INFILE语句中使用LRECL=来指定长度,这个长度必须是数据中最长行的长度,如:

INFILE’c:\MyRawData\Presidentdat’LRECL=2000;

可以通过SAS日志来查看最大记录长度。

13)INPUT语句是数据步的一部分,它告诉SAS如何读取原始数据。使用List input来写input语句:在INPUT关键词之后列出变量名(按照变量在文件中出现的顺序),变量名长度在32个字节(含)以下,只能包含字母、下划线和数据,并必须以字母或者下划线开头。如果变量是字符串,后面要价“$”号,值与值之间至少有一个空格,语句要以分号结束。如: INPUT Name $ Age Height

;

这表明输入三个变量,其中name是字符串,age和height是数值变量

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

当一些原始数据的值之间没有空格分开,或者没用用句号代替缺失值时,list input就不能用。

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

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

不要求变量值之间的空格;

缺失值可以直接用空格代替;

字符串中可以包含空格;

可以跳过不需要的变量。

Column input的input语句格式如下:input关键字后接变量名、再接变量的列位置(列位置是字符或者数值在一行中的位置)。字符串变量名后仍要用“空格+$”,变量名之间仍要用空格隔开。示例如下:

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

这个语句表明,Name变量,在行中占据第一列第十列,为字符串变量,age占据第11-13列,为数值变量,height占据第14-18列,数值变量。

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

有时候原始数据不全是字符串或者数值,比如类似1,00,001这样包括逗号的字符串值,电脑就不能读取,其他诸如包含美元符号、十六进制、压缩十进制的数据都是非标准数据。SAS中,informats可以用来告诉电脑如何读取这样的数值。

日期是最普通的非标准数据,SAS informats会把类似10-31-2003或者31OCT03转换成数字,日期的起点为1960年1月1日,即这一天的数字为0。

Informats的三种普遍格式为:字符串、数值、日期。这三种格式的形式如下:

Character $informatw

Numeric informatwd

Date informatw

$是字符串、informats代表形式(比如日期的MMDDYY)、w是宽度、d是小数点的位数、最后是句号"",缺少句号会是的SAS把形式(如MMDDYY)当做变量名。一个简单formatted input的简单INPUT语句如下:

INPUT Name $10 Age 3 Height 51 BirthDate MMDDYY10;

Name 为字符串变量,占据10个宽度,即列位置为1-10;

age为数值变量,占据3个宽度,列位置从11-13;

height为数值变量,占据5个宽度,包括1为小数点和小数点本身,列位置从14-18(如1503)

最后是日期变量,从第19列开始,形式为MMDDYY

16)混合读取方式

每种数据读取方式都有其优势,list最简单,column和formatted虽然复杂但是不要求变量之间的空格,并且变量名中可以包含变量,而且formatted可以读取特殊的数据比如日期。SAS可以灵活的让你搭配不同的读取方式,以达到最大的方便。

有多种方式进行数据读取,下面额程序是方式之一:

DATA nation;

INFILE 'C:\MYrawdata\parkdat';

INPUT ParkName $ 1-22 STATE $ Year @40 Acreage COMA9;

PROC PRINT DATA = nation;

TITLE 'Selectes national parks';

RUN;

其中ParkName是column方式读取,State和Year是list方式读取,Acreage是formatted方式读取。

混合读取方式有时会遇到问题:SAS通过一个指示器标注位置,来读取原始数据的一行,但每种读取方式对指示器的使用稍有不同。List方式下,SAS自动找到非空格区域并开始读取;column方式下,SAS读取你所指定的特定位置;informatted方式下,SAS不理会指示器的标准,只是依次的读取。这时,就会需要列指示器@n,来人为的让SAS的读取直接跳至某列。

17)读取凌乱的原始数据

有的数据排列混乱,长度不一。这样的数据需要新的工具处理:@’character’ 列指示器和colon modifier。

@’character’ 列指示器 29中提到@column列指示器可以让SAS直接从某列开始读取数据。但有时候你不知道要读取的数据是从哪列开始,此时你只要知道要读取的数据的前面那个字符或单词即可。比如有一个关于狗的原始文件,你想要读取狗的品种号,但文件排列很凌乱,只知道品种号跟随在单词breed后面,那么可以用如下方式读取:Input @’Breed:’ DogBreed $;

colon modifier 由于input读取字符串变量默认为8个字符,因此在上例中如果狗的品种名(dogbreed)超过8个字符,则需要定义长度,定义为$length,在该长度中,空格也算在内。如果要使SAS读取过程中遇到空格则不再继续读取,则要在$length前面加冒号“:”。比如原始数据中有这么一行:

例子 web日志是凌乱数据的一个很好例子,下面是一个网站的web日志,数据开始于访问IP,后面有访问日期、访问文件名等信息

现在想要读取访问日期和访问的文件名,但是它们每行中所占据的列的位置都不同,而且文件名的长度每行都不一样,那么SAS读取这种文件通过如下方式:

DATA weblogs:

INFILE 'c:\dogweblogstxt';

INPUT @'[' AccessDate DATE11 @'GET' File:$20;

PROC PRINT DATA = weblogs;

TITLE 'Dog Care Web Logs';

RUN;

@’[’作为列指示器,告诉SAS读取[之后的内容,@’GET’告诉SAS读取GET之后的内容,由于文件名作为字符串变量,这里基本都会超过8个字节,因此后面附加:$20

18)跨行观测值的读取方式

一般原始文件中一行代表一个观测值,有时会出现一个观测值跨行的情况。由于SAS会自动转到下一行读取数据,直到读取这个观测的所有变量(input语句中给出),所以你需要告诉SAS什么时候不要换行,以便在日志中不出现SAS-went-to-a-new-line的暂停说明,此时需要在INPUT语句中加行指示器。(????)

行指示器,斜线/:告诉SAS跳至原始数据的第二行;#n:跳至第n行,n代表原始数据中某观测值的行数(#2则让SAS跳至某观测值的第二行),#n不能用来回跳。

例子 有一组关于温度的数据,temperaturedat第一行代表城市和州,第二行代表本日最高温和最低温,第三行代表史上最高温和最低温。

NOME AK

55 44

88 29

用如下的程度来读取这份数据:

DATA highlow;

INFILE 'c:\myrawdata\temperaturedat';

INPUT CITY $ STATE $

/ NormalHigh NormalLow

#3 RecordHigh RecordLow;

PROC PRINT DATA = highlow;

TITLE 'High and Low temperatures for july';

RUN;

Input后面告诉SAS读取第一行的city变量和state变量,斜线/告诉SAS移动到下一行的第一列,以便读取normalhigh和normallow。#3告诉SAS移动到第三行的第一列以便继续读取观测值的recordhigh变量和recordlow变量。这里/可以用#2代替,也可以用/代替#3。

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

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

:在SAS读取某一行观测值时,首先读取足够的变量以便决定是否需要保留此行的观测值。然后在input语句结尾加符号@,叫做a trailing at(called a trailing at),这告诉SAS先停在(hold)此行,同时用IF语句检测此观测值是否满足需要,如果是,那么可以再用一个input语句来读取现有的变量

@ vs @@ @的作用类似于@@,都是行停留指示符(line-hold specifiers),不同地方在于停留多久,@能使SAS停留到下一个input语句(也不换行),@@能使停留的时间到下一个data步

arry是数组语句,现在有一个nut数组,数组有26项数据,数据内容依次为 kcal protein fat avcarbo totalcarbo fibre ash chole va caro retin thin ribof niacin vc totalve ca p k na mg fe mn zn cu se

现在从第一个数据kcal开始 nut(1)=(nut(1)/100)v39(keshibu/100)且知道nut(1)=kcal

所以nut(1)=(kcal/100)v39(keshibu/100) //这个表达式没看懂,可能你自己做一遍就知道了,我不太理解。。。

所有26项数据按 上述 *** 作执行一遍,新生成的nut数组放到three表格里。

注:set newtwo2; 表示读取netwo2这张表。一般来说,这个时候three这张表会填充进netwo2里的内容。但是!!这里的表都没有逻辑库,表示无法理解,你确定这段代码能跑通?不会的再追问吧。

SAS的数据步和过程步以及书写规则

每个SAS程序可以由许多步构成,

一些简单的程序,是由许多完成单个动作的“程序步”和一些设定环境的语句构成的。SAS只有两种程序步:

1 数据步(Data Step):读入源数据文件和SAS数据集,修改、编辑、或创建SAS数据集或文本文件;

2过程步(Proc Step):面向SAS数据集,完成某个特定的计算,分析,和呈现的功能。

每个程序都是由若干语句构成。每个语句是有一个关键词开始,并以分号结束。通常就用开始的关键词命名这个语句。

DATA语句与PROC语句分别标志着数据步和过程步的开始,RUN语句或另一个程序的开始标志着程序的结束。

SAS程序的书写规则:

SAS程序是由SAS语句构成的。每个语句由关键词开始,分号结束。在程序编写时,SAS语句的书写格式比较自由,即:

1语句可在行的任一列开始和结束;

2语句的词之间可以用一个或多个空格符或其它特殊字符隔开。

3一个语句可以分写为多行(换行时,换行符相当于一个空格符)

4多个语句也可以写在同一行。

SAS软件主要是是用于统计分析的工具,应用SAS程序可以采集数据点、建立数据集并分析数据。SAS程序主要分为Data步和Proc步两大类;用Data步创建和加工数据集,用Proc步对数据集进行各类分析。SAS软件同时也是应用于数据库的好软件。

AS语句

SAS语言程序由数据步和过程步组成。数据步用来生成数据集、计算、整理数据,过程步用来对数据进行分析、报告。SAS语言的基本单位是语句,每个SAS语句一般由一个关键字(如DATA,PROC,INPUT,CARDS,BY)开头,包含SAS名字、特殊字符、运算符等,以分号结束。

SAS关键字是用于SAS语句开头的特殊单词,SAS语句除了赋值、累加、注释、空语句以外都以关键字开头。SAS名字在SAS程序中标识各种SAS成分,如变量、数据集、数据库,等等。SAS 名字由1到8个字母、数字、下划线组成,第一个字符必须是字母或下划线。SAS关键字和SAS 名字都不分大小写。

SAS表达式

SAS数据步程序中的计算用表达式完成。表达式把常量、变量、函数调用用运算符、括号连接起来得到一个计算结果。

SAS常量主要有数值型、字符型两种,并且还提供了用于表达日期、时间的数据类型。例如

数值型:12,-75,25E-10

字符型:'Beijing',"Li Ming","李明"

日期型:'13JUL1998'd

时间型:'14:20't

日期时间型:'13JUL1998:14:20:32'dt

filenam语句的作用是,自定义字符来代替某个路径。这个路径可以是文件也可以是文件夹。

例如:

此处加粗的abc代表的就是:D:\Novo\autoexecsas

这个语句很大的作用是为了方便,简化路径。但是有的时候这样使用并不方便,比如我希望使用D:\Novo路径下的autoexec1sas,autoexec2sas等多个文件,那么就必须用filename定义同样数目的路径名。这样的方法并不方便。

故而filename定义的路径名还有另一种使用方法,下面的例子和上面的例子是等效的:

不仅如此,下面的例子也是等效的:

以上就是关于SAS的Iml的基本格式及用法全部的内容,包括:SAS的Iml的基本格式及用法、如何利用the little sas book 学sas、求助一段sas程序是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9664652.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存