❶ sas 宏变量解析是在编译阶段还是执行阶段
%let 宏变量名=值;调用宏变量:&宏变量名 Tips: 1、以逗号作为宏变量定义的结束。
❷ 什么是SAS系统
SAS系统(Statistics Analysis System)查询系统是20世纪90年代初由EMBL的Thure Etzold博士带领的课题组创建的,是一个功能强大的数据库整合平台,可进行数据库集成、序列查询、序列处理等工作。
(2)SAS编译和执行过程扩展阅读:
SAS 系统全称为Statistics Analysis System,最早由北卡罗来纳州立大学的两位生物统计学研究生编制,并于1976年成立了SAS软件研究所,正式推出了SAS软件。SAS是用于决策支持的大型集成信息系统,但该软件系统最早的功能限于统计分析,至今,统计分析功能也仍是它的重要组成部分和核心功能。SAS现在的版本为9.4版,大小约为 8G。
经过多年的发展,SAS已被全世界120多个国家和地区的近三万家机构所采用,直接用户则超过三百万人,遍及金融、医药卫生、生产、运输、通讯、政府和教育科研等领域。在数据处理和统计分析领域,SAS系统被誉为国际上的标准软件系统,并在96~97年度被评选为建立数据库的首选产品。堪称统计软件界的巨无霸。
❸ SAS是一种什么样的语言
SAS语言是一种用于统计分析的编程语言,源自于北卡罗来纳州立大学的一个计划。它可以读取普通的电子表格和数据库,然后以图形或表格的方式导出为RTF、HTML或是PDF文件。SAS语言可以在Windows、Linux、Unix与大型计算机下使用编译器运行。
统计分析系统和世界编程系统都是支援SAS语言的编译器。
❹ SAS是什么
一、SAS系统简介
SAS是一个庞大的系统,它目前的版本可以在多种操作系统中运行。当前在国内被广泛使用的最新版本是8.2版,功能很强大,我深有体会。
据说9.0版已在国外面世,已经有一些有关它的抢先报道在网络上广为流传,说它如何如何美妙,令人不禁充满期待。
SAS8.2的完整版本包含以下数十个模块。
BASE,GRAPH,ETS,FSP,AF,OR,IML,SHARE,QC,STAT,INSIGHT,ANALYST,ASSIST, CONNECT,CPE,LAB,EIS,WAREHOUSE,PC File Formats,GIS,SPECTRAVIEW, SHARE*NET, R/3,OnlineTutor: SAS Programming,MDDB Server,IT Service Vision Client, IntrNet Compute Services,Enterprise Reporter,MDDB Server common procts,Enterprise Miner,AppDev Studio,Integration Technologies等。
所谓模块,我的理解是将功能相近的程序、代码等集中起来组成相对独立的部分,就称之为模块,类似于办公软件系统office中包含的word、excel、access等。各模块具有相对独立的功能范围,我们常用的模块有base,graph,stat,insight,assist,analyst模块等,分别执行基本数据处理、绘图、统计分析、数据探索、可视化数据处理等功能。其余模块我用得很少,知道得也很少,所以也就不多说了。
SAS系统的长处,体现于它的编程操作功能的无比强大。SAS一直以来也是注重于其编程语言的发展,对于可视化方式的菜单操作投入较少,其较早的版本仅有很少的菜单操作功能,使用起来也是非常的别扭。这很可能就是在windows人机交互式操作系统占统治地位的今天,SAS较少被人问津的原因之一。
到了最新的几个版本,SAS也对可视化操作方法投入了一定的关注。从8.0版以后,出现了几个功能强大的可视化操作的模块,如insight模块和analyst模块等,其菜单操作的方便程度以及人机界面的亲和性绝不亚于SPSS等着名的可视化统计分析软件。
然而要想完全发挥SAS系统强大的功能,充分利用其提供的丰富资源,掌握SAS的编程操作是必要的,也只有这样才能体现出SAS在各个方面的杰出才能。
二、SAS系统基本操作及基本概念
哪位要是连软件的安装和打开都要我啰嗦的话,我劝您还是买一套洪恩的《开天辟地》好好热热身先。
SAS 8.2的界面中间是三个并排(或层叠)的窗口,那个叫做Program Editor的窗口(窗口标签为Editor)就是用来输入SAS语句的,编程操作的所有内容都是在该窗口内完成的,各位还是要跟它先多熟悉一下。
(一)数据集(dataset)和库
统计学的操作都是针对数据的,SAS中容纳数据的文件称为数据集,数据集又包含在不同的库(暂且理解为数据库吧)中。SAS中的库分为永久性和临时性两种。顾名思义,存在于永久库中的数据集是永久存在的(只要你不去删除它),临时库中的数据集则在你退出SAS后自动被删除。至于SAS中库的概念,最简单的理解就是一个目录,一个存放数据集的目录。
数据集的结构完全等同于我们一般所理解的数据表,由字段和记录所构成,在统计学中我们习惯将字段称为变量,在后面的内容中字段和变量我们就理解为同一种东西吧!建立数据集的方法很多,编程操作中有专门的数据读入方法来建立数据集,但需要将数据现场录入,费时费力。如果数据量大,我劝各位还是先以其它方法将数据集建好,否则程序语句的绝大部分会浪费在数据的输入上。
What are 其它方法?各位是不是去参考一下别的书籍或资料。要不您是不是可以等一等,我准备若干年后出一本SAS操作大全。
(二)SAS程序概述
和其它计算机语言一样,SAS语言(称为SCL语言,SAS Component Language)也有其专有的词汇(即关键字)和语法。关键字、名字、特殊字符和运算符等按照语法规则排列组成SAS语句,而执行完整功能的若干个SAS语句就构成了SAS程序。
SAS程序包括多个步骤和一些控制语句,一般情况下均包括数据步和过程步,一个或多个、数据步或过程步,它们之间任何形式的组合均可成为一段SAS程序,只要能完成一个完整的功能。通常情况下SAS程序还包括一些全程语句,用以控制贯穿整个SAS程序的某些选项、变量或程序运行的环境。
SAS程序的语句一般以关键字开始,以一个分号结束,一条语句可占多行(SAS每看到一个分号,就将其以前、上一个分号以后的所有东东当作一条语句来处理,而不管他们处在多少个不同的行中)。SAS语句对字母的大小写不敏感,你可以根据个人习惯决定字母的大写或小写。
1. 库名(库标记)的定义
为了保存宝贵的数据和方便操作起见,我习惯于指定自己的库名及其路径(目录),因为SAS系统中已有的永久库(SASUSER)无论库名还是其对应的路径都太过繁琐,使用太不方便。程序中用到的数据,都可以永久的保存于该路径下,保证以后可以重复使用。指定库名的语句为全程语句,其格式如下:
Libname 库名 ‘路径’;
例如我们指定的库名为“a”,路径为:“e:\data\”,SAS语句如下:
libname a ‘e:\data\’;
2. 数据步
SAS的数据步以data语句开始,用于创建和处理数据集。Data语句以关键字“data”开始,格式如下:
data 数据集名;
例如:data a.case; 将创建在库a中名为case的SAS数据集,语句执行后你可在与库a对应的目录下看到刚刚建立的数据集文件case。
Data语句所指定的数据集,一般都是以“库名.数据集名”的格式出现的,也可以单独的“数据集名”出现,此时的数据集系统默认为是临时库中的数据集,退出系统后将会被删除。
data语句有两个重要的功能,标志数据步的开始和命名将要创建的SAS数据集。
除data语句外,数据步一般情况下还包括infile语句、input语句以及datalines语句等。在不同的数据输入方式下对于它们的使用方式也不一样。
SAS程序有两种常见的数据输入方式,即从外部文件读入和直接输入两种方式。
(1)外部文件读入方式
数据若已经包含在某个外部文件(文本文件或数据文件)中,可用此方法输入数据到数据集文件中。
在以上介绍的data语句后,写入以下语句:
infile ‘外部文件的所在位置及名称’ 选项;
input 变量名1变量名2 …变量名n;
infile语句用于从外部文件读入数据,必须出现在input语句之前。它的功能是指定一个包含原始数据的外部文件。
input语句用于向系统表明如何读入每一条数据记录。它的主要功能有:读入由语句指定的数据列,为相应的数据域定义变量名,确定变量的读入模式。
例如:
libname a ‘e:\data\’;
data a.student;
infile ‘e:\data\student.txt’;
input name height weight;
以上程序将目录“e:\data\”下的文本文件“student.txt”中的数据输入数据集student中,该数据集存放于目录“e:\data\”下。
(2)直接输入方式
数据量较少或操作者意志力坚强的情况下采用此种输入方式,在data语句之后写入如下语句:
input变量名1变量名2 …变量名n;
datalines;(在以前的版本下为cards,新版本下两者可通用)
… … … …(数据行)
… … … …(数据行)
… … … …(数据行)
;
datalines语句用于直接输入数据,标志着数据块的开始。
注意:这里的数据行中数据之间以空格分隔,当然也可以其它东东如逗号等来分隔,这里大家先以空格来分隔好了。因为不同的分隔方式下input语句要采取相应的控制选项,这些我们以后再讨论,这里我们还是省省力气吧。另外数据行输完后不能像其它语句那样直接在后面加上分号,而要另起一行输入分号,这样SAS才认为这是在输入原始数据而不是在搞别的什么。
例如:
libname a ‘e:\data\’;
data a.student;
input name $ height weight;(name后面的$符号表示变量name为字符型变量)
datalines;
Linda 171 51
Mary 168 50
Selinna 169 49
;
以上程序将直接建立数据集文件student,该数据集文件存放于目录“e:\data\”下。
3. 过程步
SAS程序的过程步表示一个处理过程,如排序、T检验、方差分析等等。过程步以关键字proc开始,后面紧跟着过程名,用以区分不同的程序步,并以关键字run结束。
一般的格式如下:
proc 过程名 选项列表;
……(其它语句);
……(其它语句);
run;
SAS程序中涉及的过程多达数百种,实现统计功能时常用的过程也有数十种之多,现将最为常用的过程名称及其所能实现的功能列入下表(表1.1),以便各位提前热热身。
表1.1 常用的过程名称及其功能
过程名
功 能
Sort
将指定的数据集按指定变量排序
Print
将数据集中的数据列表输出
tabulate
将数据按照指定的分类变量以表格的形式分类汇总
Means
对指定的数值变量进行简单的统计描述
Freq
对指定的分类变量进行简单的统计描述
Ttest
对指定的变量做t检验
Anova
对指定的变量做方差分析
npar1way
对指定的变量做非参数检验
Reg
对指定的变量做回归分析
Corr
对指定的变量做相关分析
Discrim
对指定的变量做判别分析
Cluster
对指定的变量做聚类分析
Chart
绘出低分辨率的统计图
4. 几个常用的重要过程
在进入一般统计学功能实现的内容之前,有关数据预处理和执行重要公共功能的过程大家有必要预先掌握,这里选出几个常用的和重要的过程进行讨论。
(1)对SAS文件进行操作的datasets过程
datasets过程是对数据文件进行管理操作的工具,利用它我们可以实现以下功能:
将SAS文件从一个库中拷入另一个库中;
对SAS文件进行重命名;
修复损坏的SAS文件;
删除SAS文件;
列出某一SAS库中所有的SAS文件;
列出一个SAS数据集的属性,如最后修改时间、数据是否压缩、数据是否索引等;
对SAS文件进行设置密码的操作;
向SAS数据集添加记录;
对SAS数据集的属性以及数据集内变量的属性进行修改;
创建或删除SAS数据集的索引;
创建并管理SAS数据集的核查文件;
创建或删除SAS数据集的完整性规则。
datasets过程的一般格式如下:
proc datasets <选项列表>;
age 当前文件名 相关文件名列表</选项列表>;
append base=数据集名 <data=数据集名 其它选项>;
audit 文件名<(操作密码)>; initiate;<其它代码;>
change 旧文件名1=新文件名1 <…旧文件名n=新文件名n> <选项列表>;
contents <data=数据集名> <其它选项>;
out=库标记 <其它选项>;
exclude 文件名 <其它选项>;(该语句只能在语句后出现,不能和select语句同时出现)
select 文件名 <其它选项>;(该语句只能在语句后出现,不能和exclude语句同时出现)
delete 文件名 <其它选项>;
exchange文件名1=交换文件名1 <…文件名n=交换文件名n> <选项列表>;
modify 文件名 <选项列表>;
<modify语句之从属语句>;
repair文件名 <选项列表>;
save文件名 <选项列表>;
run;
是不是太繁琐了,我都有些不耐烦了。不过我还是得写,已经写了嘛!不忍心浪费掉,最起码可以用来充充数,扩大一下篇幅。至于各位,嫌烦的可以略过此部分,想用的时候再来温习也不迟。下面我就不厌其烦地向各位介绍一下各选项及各条语句的含义和用法。
proc datasets语句后各选项的含义及用法见下表(表1.2)。
表1.2 proc datasets语句后各选项的含义及用法
选项
含义及用法
alter=转换保护密码
SAS文件设置有转换操作密码时用以验证操作的合法性,密码正确时代码才会被执行
details/nodetails
控制有关SAS文件的详细信息显示与否,前者为显示,后者不显示,默认值为后者
force
此选项具有两个功能:(1)在过程步的语句存在错误时仍然强制程序的执行;(2)在append语句中,两个数据集的变量不完全相同时仍然强制append语句的执行。
gennum=
控制对衍生数据集的处理方式,等号后可为all, hist, revert或某一整数
kill
此选项表示删除待处理的库中的所有文件,应慎用
library=库标记
用以指定所要处理的库
memtype=成员类型
指定处理所针对的库成员类型(文件类型),默认值为all(所有类型)
nolist
在日志文件中禁止对所处理文件目录的显示
nowarn
在语句中指定的文件不存在等情况下,禁止显示出错信息,强制程序继续执行
pw=操作密码
SAS文件设置操作密码时验证操作的合法性(包括读、写保护以及转换保护的文件)
read=读保护密码
SAS文件设置读保护密码时验证操作的合法性
age语句用于批量地重命名文件,按照当前文件和相关文件的排列顺序,依次将后一个文件名重命名给前一个文件,结果是最后一个文件被删除,当前文件名被废弃。
对此语句我所了解的就这么多,而且还是通过试验得出的结论,但总感觉还是理解的不对,哪位若有高见还请不吝赐教。
append语句执行向数据集添加记录的功能,选项“base=数据集名”用以指定要添加记录的数据集,“data=数据集名”则指定所要添加的记录所在的数据集,此选项若省略则默认为当前数据集(最近一次操作的数据集)。
audit语句用于对文件的核查,生成核查文件并对其进行管理;change语句以新文件名替换旧文件名;contents语句用于显示指定数据集或当前数据集的各种属性;语句用于将当前库中相应的文件拷贝到指定的库中,选项“out=库标记”用来指定文件要拷贝到的目标库;delete语句用于删除指定的文件;exchange语句的功能是将等号前后两个文件的文件名进行互换;modify语句用于修改文件各方面的属性;repair语句用于对指定的文件(受到过某种损坏)进行修复,使其恢复到可以使用的状态;save语句的功能是将其指定的文件保留,当前库中的其他所有文件则被删除。
(2)对数据文件中记录进行排序的sort过程
sort过程的功能是对指定数据集中的记录按照指定的变量进行排序。由于诸多过程有对数据集记录进行排序的需要,比如过程步中存在by语句(用以将数据文件分割为若干部分)的情况下,就需要按照by语句后的变量对数据先行排序,所以sort过程非常有用,而且非常常用。
sort过程的一般格式如下:
proc sort 选项列表;
by <descending> 变量名1 <变量名2 … 变量名n>;
run;
proc sort语句后各选项含义及其用法见下表(表1.3)。
表1.3 proc sort语句后各选项含义及其用法
选项
含义及用法
data=数据集名
用以指定sort过程所要处理的数据集,若省略则默认为最近建立或处理的数据集
date
此选项指定在不改变文件创建日期和修改日期的条件下对文件进行排序操作
out=数据集名
将排序后文件以指定的文件名存储,原文件不进行任何修改,若无此选项则将原文件覆盖
sortseq=排序依据
指定对字符型变量排序时依据的标准
reverse/equals/noequals
指定输出数据中的排序方式,三者分别表示将字符变量的次序翻转显示,在排序变量的各水平内部次序保持不变,在排序变量的各水平内部允许次序的改变
nopkey/noprecs
指定重复变量的消除方式,前者表示除去排序变量值重复的记录,后者表示除去所有变量值重复的记录
sortsize=
用以指定可用最大内存的大小,等号后为表示内存大小的数值及单位,比如10m
force
用以强制执行重复排序(对已建立索引的文件排序)过程
tagsort
指定在临时文件中仅存储排序变量和记录编号,以减少对磁盘空间的使用
by语句即用以指定排序所要依据的变量,变量可为数值型也可为字符型,其后可指定多个变量,sort过程在按照靠前的变量进行排序的情况下再按照靠后的变量进行排序。by语句中每个变量前可用descending/ascending选项来指定按照其排序的方式(降序或升序),默认状态为升序。
(3)将数据文件输出显示的print过程
print过程的功能是将SAS数据集的记录以一定的方式显示到输出设备(显示屏),可以显示其全部的变量或部分变量。利用此过程,你可以创建从简单列表到可进行数据汇总的各种报告的各种不同的表单。
print过程的一般格式如下:
proc print 选项列表;
by <descending> 变量名1 <变量名2 … 变量名n 其他选项>;
pageby 变量名;
sumby 变量名;
id 变量名;
sum变量名;
var变量名;
run;
proc print语句后可跟的选项含义及其用法见下表(表1.4)
表1.4 proc print语句后选项含义及其用法
选项
含义及用法
contents=文本
用以指定html内容文件中指向输出的链接的标识文本,等号后可为任何文本
data=数据集名
指定所要处理的数据集,等号后为数据集文件名
double
指定在相邻的记录间插入一空行
n=字符串
在报告的末尾或by变量各水平分组的末尾显示显示记录的数目,并以等号后的字符串对其进行标识
noobs
禁止记录编号在报告中的显示
obs=列标题
用以指定记录编号所在列的列标题
round
对未进行格式化的数值变量进行四舍五入,统一格式化为带两位小数的十进制数值
rows=page
规定页面格式,目前’page’是此选项唯一可用的值,表示在每一页中只显示一条记录的一行变量值,即一行中显示尽可能多的记录数
width=列宽度
指定列的宽度,可取的值有’full’,’minimum’,’uniform’,’uniformby’等,
heading=方向
取值可为v(vertical)或h(horizontal),表示列标题显示的方向(横向或纵向)
label
指定以变量标识作为相应的列标题,否则以变量名作为列标题
split=字符
首先此选项指定以变量标识作为列标题,以指定的字符作为列标题换行的标志
style=类型元素
指定报告中特定位置所要应用的类型元素(涉及很多内容,详细内容略)
by语句在所有过程中的用法都相同,即将数据集分割为若干小数据集分别进行处理。pageby语句用来控制换页时变量的显示方式,对于其后所指定的变量,相同的值不会显示在不同的页中,该变量某一值的记录在一页的剩余部分显示不下时,则从该值的第一条记录开始换行显示。sumby语句的作用和pageby语句相似,只不过是将换页的动作换为求和,对指定变量的每一值计算var变量的总计值。id语句的作用是用指定的变量值代替记录编号对每一条记录进行标识。sum语句用于指定报告中要进行求和操作的变量,var语句用于指定要在报告中显示的变量。
以上过程作用较为普遍,使用频率较高,有必要预先了解,以便于后面所讨论内容的顺利进行。
为节省篇幅,这里不进行实例演示。内容过于枯燥,可能的错误也难免,还请各位多多包涵。
SAS程序操作的大概情况就草草的这样介绍一下吧,说得太多的话我怕各位没有耐心看下去。更多的内容我想还是留在实际的例子中来介绍,这样大家可以好好的切身体会一下,然后就会印象深刻,实际运用起来也就得心应手了。
❺ SAS的问题
1.关于时间的问题,你要看你的sas的license的使用日期.sas软件是只租不卖的,每个license有一定的使用期限,只要你把时间调到这个期限内都可以用的.你可以使用一下语句来查看你的license的一些信息.
proc setinit;
run;
2.导出EXCEL文件的代码直接写在编辑器里面,按f3执行就可以
proc export data=datasetName
outfile="E:\myExcel.xls" replace
DBMS=EXCEL;
SHEET="ExcelSheetName";
GETNAMES=Yes;
run;
以上代码中的outfile是你的导出的excel文件的路径,replace代表覆盖掉你指定的.xls文件里面的内容,如果不想覆盖原文件的内容就不写replace,dbms指定数据库管理系统,就是如果你要导出到excel就写EXCLE.sheet是指定excel文件的sheet页的名字,getname是指导出到数据包含列名.
如果出现ERROR: DBMS type EXCEL not valid for export.
那么很可能是因为SAS/ACCESS 转换PC文件格式没有在sas服务器上面验证.
3.系统聚类分析的基本思想是首先将每个样本当作一类,然后根据样本之间的相似程度并类,并计算新类与其它类之间的距离,再选择相近者并类,每合并一次减少一类,继续这一过程,直到所有样本都并成一类为止。在聚类过程中,我们选用欧氏距离来度量类与类之间的相似程度,聚类方法采用类平均法。
SAS/STAT中提供了谱系聚类、快速聚类、变量聚类等聚类过程。
那个求最短距离的代码我不知道 ,因为我不是学统计的,没用过,你自己查查资料吧.另外sas自带的帮助文档就是最好的资料,你可以好好利用,再推荐给你一个网站http://support.sas.com,有sas问题直接在上面搜索就可以了
❻ 求助:SAS程序编写,做题
没有命题呀?只给数据,可以建库,要分析什么呢?如下例可计算身高与体重的平均值:
data li1;
input id $ name $ height weight@@ ;
cards;
1 tom 187 75
2 cendy 169 57
3 mcdonald 189 85
;
run;
proc means data=li1;
var height weight;
run;
❼ SAS语言的作用
SAS是一种专用的数据处理、统计计算语言,但是它也包含一般的高级语言编程能力并扩充了许多数学、统计等方面的函数。
SAS语言的编程计算能力主要由SAS数据步提供。DATA语句以关键字DATA 开头,后面给出一个数据集名,例如:
data out1;
则在本数据步要生成的数据集,其名字为out1。我们也可以省略数据集名,这时SAS自动生成一个临时数据集名。也可以使用特殊名字_NULL_ ,表示本数据步不生成数据集。
一赋值语句
在SAS中用赋值语句计算一个值并存放到变量中。
格式为
变量名 = 表达式;
例如:
avg = (math + chinese)/2;
isfem = (sex='女');
y=sin(x)**2;
newv = .;
其中第一个赋值语句用一个公式计算平均分数。第二个生成一个取值为0或1的变量,性别为女时为1,否则为0。第三个使用了正弦函数和乘方运算。第四个给变量赋了缺失值。
二输出语句
SAS数据步的输出一般是数据集,用赋值语句计算的结果会自动写入数据集。SAS也提供了一个PUT语句用于立即打印输出结果。
PUT语句的语法:
PUT 输出项表
输出项表中只能是变量或字符串,项间用空格隔开。如:
data;
x=0.5;
y=sin(x);
put 'Sine function value of ' x 'is ' y;
run;
结果将在运行记录窗口显示一行
Sine function value of 0.5 is 0.4794255386
PUT说明
⒈在PUT语句中,若在变量名后加“=”,则指定输出项可以显示带有变量名的输出结果。
比如把上程序中的PUT语句改为
put x= y=;
则结果在LOG窗口显示为
X=0.5 Y=0.4794255386
⒉指定变量输出项的具体列位置及小数位数
绝对位置格式:
变量 起始列-结束列.小数位数
比如,
put x 10-20 .6 y 30-40 .6;
指定把X数值显示在第10-20列,保留6位小数,把
Y数值显示在第30-40列,保留6位小数。
在指定的列位置内,数值型数据靠右对齐,字符型
数据靠左对齐。变量为整数值或者字符型则不指定
小数位数。
相对位置格式:
变量 宽度.小数位数(用于数值型)
变量 $宽度.(用于字符型)
如:put x 20.8 y 20.8; 使X占用第1-20列,8位小数,右对齐;Y占用第21-40列,8位小数,右对齐。
而put name $10.;使name占用10列。
输出占位不满指定宽度时,数值型数据向右对齐,字符型数据向左对齐。
⒊如果希望PUT语句的输出不产生换行,使下一个PUT的结果可以显示在同一行,只要在PUT 语句结尾处加一个@符。
PUT语句的输出结果缺省情况下被送到运行记录窗口。若在PUT语句之前用FILE语句可以改变PUT语句的输出目的地。如,在PUT语句之前用file print;可以把PUT语句的输出转向到输出窗口。在FILE语句中指定一个包含文件名的字符串可以把PUT语句的输出转向到此文件中。比如file 'tmp.out';输出文件把后续的PUT语句输出转向到当前工作目录下的文件“tmp.out”中,生成tmp.out 。注意当前工作目录在SAS状态栏的右方显示,双击可以更改。文件名也可以指定全路径,比如“C:SASTMP.OUT”。
三分支结构
⒈if...then...else 结构
⒉SELECT结构
1. if...then...else 结构
格式为:
IF 条件 THEN 语句;
ELSE 语句;
例: data temp1
input x @@;
if x>0 then put x '是正数';
else put x '是负数';
cards;
1 2 -3 4 -5
;
run;
有时我们在条件成立时需要进行的操作无法用一个语句完成,这时可以使用SAS提供的复合语句功能。例:
data;
input x@@; /*不分行符@@的使用:每读入一天记录后,数据指针保持原位不换行,
继续读下一条记录*/
if x>0 then do;
y=2*x;
put 'f(' x ')=' y;
end;
else put 'Data Error!';
cards;
1 2 -3 4 -5
;
run;
如果当条件不成立时,不进行什么操作,可以不使用ELSE及其后面的语句。
2.SELECT结构
格式一:
SELECT (选择表达式);
WHEN(值列表) 语句;
WHEN(值列表) 语句;
……
OTHERWISE 语句;
END;
功能及流程:
执行SELECT结构时,先计算出选择表达式和值列表中的所有值,然后把选择表达式值由前向后与值列表中的值相比,发现相等值则执行对应的语句,然后退出SELECT结构(不再查看后面的值列表)。如果选择表达式的值不等于任何值列表中的值则执行OTHERWISE对应的语句,这种情况下没有OTHERWISE语句会出错。
例:
DATA ;
INPUT month $ @@;
put month @;
SELECT(month);
WHEN('Feb', 'Mar', 'Apr') put '春天';
WHEN('May', 'Jun', 'Jul') put '夏天';
OTHERWISE put '秋天或冬天';
END;
CARDS;
Mar Jun oct
;
run;
格式二:
SELECT;
WHEN(条件) 语句;
WHEN(条件) 语句;
……
OTHERWISE 语句;
END;
这种SELECT语句没有选择表达式,而是在每
一个WHEN语句指定一个条件(逻辑表达式),
执行第一个满足条件的WHEN后的语句。如果所
有条件都不满足则执行OTHERWISE后的语句。
例:
data;
input age @@;
put age @;
SELECT;
WHEN(age<=12) put '少年';
WHEN(age<35) put '青年';
OTHERWISE put '中老年';
END;
cards;
10 30 50
;
run;
四循环结构
⒈计数DO循环
⒉当型循环
⒊直到型循环
⒈计数DO循环
计数DO循环的格式:
DO 计数变量 = 起始值 TO 结束值 BY 步长;
循环体语句……
END;
这种结构与BASIC中计数循环很类似,功能也相当,只是在SAS中是以关键字DO开头(不是FOR),另外步长用BY引导(不是STEP),而结构以END结束(而不是NEXT)。
其功能与流程:
程序先把计数变量赋值为起始值,如果此值小于等于结束值则执行循环体语句,然后把计数变量加上步长,再判断它是否小于等于结束值,如果是则继续执行循环体,直到计数变量的值大于结束值为止。上述结构中“BY 步长”可以省略,这时步长为1。如果步长取负值,则继续循环的条件是计数变量大于等于结束值。
计数DO循环举例
data;
sum=0;
DO i = 1 TO 10 ;
sum +i;
/*此处sum+i等价于sum=sum+i*/
END;
PUT sum=;
run;
在循环体中可以用LEAVE语句跳出循环(功能与C语言的break语句相当),如:
data;
n=13;
flag=1;
DO i = 2 TO n/2 ;
if mod(n,i)=0 then do;
flag=0;
leave;
end;
END;
if flag=1 then
put n 是素数;
else
put n 不是素数;
run;
⒉当型循环
当型循环的格式:
DO WHILE(循环继续条件);
循环体语句……
END;
程序先判断循环继续条件是否成立,成立时执行循环体语句,再判断循环继续条件,如此重复,直到循环继续条件不再成立。
data;
x=243;
y=63;
z=mod(x,y);
DO WHILE (z ^= 0);
x=y;
y=z;
z= mod(x,y);
END;
put y;
run;
⒊直到型循环
直到型循环的格式:
DO UNTIL (循环退出条件);
循环体语句……
END;
程序先判断循环退出条件是否成立,成立则结束循环,否则继续。例:
data;
n=0;
do until (n>=5);
n+1;
put n=;
end;
run;
❽ SAS编程语言知多少
Base SAS模块的:
· Data Step(数据步,在SAS帮助文档中称为SAS 语言)
· DS2(Data Step 2,最新一代的编程语言)
· MACRO(宏)
· SQL和FedSQL(虽然只是两个过程步,不能称之为一门语言,但是作为数据处理尤其是数据库处理的编程语言其作用相当重要。)
· FCMP(Function Compiler,用于用户自定义函数和子例程的编译和管理)
· GTL(Graphic Template Language,图形模板语言)
· Metadata Language(元数据管理语言)
SAS/AF模块的:
· SCL(SAS Component Language SAS组件语言,现在已经很少有人用了。)
SAS/OR模块的:
· OPTMODEL(Optimization Model,优化模型编程语言)
SAS/IML模块的:
· IML(矩阵编程语言)
SAS/IML Studio模块的:
· IMLPlus(IML 语言的扩展,主要用于生成图形、调用SAS过程步和非SAS程序)
JMP模块的:
· JSL(JMP Script Language,JMP 脚本语言)
❾ 如何在不打开SAS的情况下通过批处理文件调用一批SAS程序并保存运行结果
谢谢两位的回答,这个问题其实还可以这样实现,建立文件名为run.bat的批处理文件,内容为:@echo on "C:\Program Files\SAS Institute\SAS\V8\sas.exe" -sysin E:\SASP\prg1.sas "C:\Program Files\SAS Institute\SAS\V8\sas.exe" -sysin E:\SASP\prg2.sas...@echo off 但我看到有人用的方法更简单,如内容为SAS PRG1.SASSAS PRG2.SASSAS PRG3.SAS...的BAT文件也可以实现上述功能,但不知道如何设置
❿ sas 程序
一个数据步可以包括多个INPUT语句。在数据步执行过程中,一般的,在INPUT语句执行前,会默认从外部数据源读取一个观测记录(一般为一行或多行)到输入缓冲器中,然后按照INPUT设定的格式读入相关变量到PDV中。当程序有多个INPUT语句时,每一个INPUT语句都会在执行前读入一个观测记录到输入缓冲器。因此若前一个input语句执行完毕之后,若该行的数据没有使用完,遇到下一个INPUT语句时也会放弃之前没有用完的数据。若需要保留前一个INPUT语句使用过的数据行供以后的input语句使用,只需在前一个INPUT语句最后加入跟踪符合@,表示该行没有用完的数据暂时保存在输入缓冲器中以备下一个最近的INPUT语句使用。
在数据步执行的每次循环开始时,程序会将输入缓冲器中的信息删除,在程序执行过程中遇到INPUT语句时,就从源数据文件中读入一个新的观测记录(一般是一行或多行)到输入缓冲器。如果源数据文件中一个数据行有多个观测记录,每次循环也只能读取第一个。若要在程序运行的下一个循环中继续读取之前没有读完的数据行,只需在INPUT语句最后加入两个跟踪符号@@,表示该行没有用完的数据保存在输入缓冲器中以备下一个程序循环继续使用。
例如:
data nums;
input x @;
input y;
datalines;
1 2
3 4
5 6
7 8
;
run;
proc print;run;
注意上述程序第二行的最后“@”符合。
data nums;
input x y @@;
datalines;
1 2 3 4
5 6 7 8
;
run;
proc print;run;
不知道对不对~
希望回答对你有帮助