文档库 最新最全的文档下载
当前位置:文档库 › 各种常见随机化的SAS实现

各种常见随机化的SAS实现

各种常见随机化的SAS实现
各种常见随机化的SAS实现

各种常见随机化的SAS实现

在前两期的讲座中我们介绍了实验设计的三要素与四原则[1],本期将结合实例重点阐述实验设计中如何实现各种常见的随机化。随机化体现在如下三个方面[2]:①抽样随机:每一个符合条件的实验对象参加实验的机会相同,即总体中每个个体有相同的机会被抽到进入样本之中。它保证所得到的样本具有代表性,使实验结论具有普遍意义;②分组随机:每个实验对象分配到不同组(通常为对照组、不同处理组)的机会相同。它保证大量难以控制的非处理因素在对比组间尽可能均衡一致,以提高各组间的可比性;③实验顺序随机:每个受试对象先后接受处理的机会相等,它使实验顺序的影响也达到均衡。本期主要就如何用SAS 实现随机抽样和随机分组进行阐述。

已知编号为1-20的20例病人的基本信息见表1。本文将以表1数据为例,阐述随机化的SAS实现。

表1 20例病人的基本信息

病人编号 1 2 3 4 5 6 7 8 9 10 性别 F F M F F F M M M M

病人编号11 12 13 14 15 16 17 18 19 20 性别M M F F F F F M F F

年龄58 63 23 37 20 33 39 40 49 42

1. 随机抽样

目前在SAS/STAT模块中,有一个与调查设计有关的SURVEYSELECT过程。该过程可用来实现各种随机抽样,包括:单纯随机抽样、系统随机抽样、分层抽样、无限随机抽样(有替换)、序贯随机抽样、以及按规模大小成比例概率抽样(PPS)等。

1.1 简单随机抽样的实现

简单随机抽样,就是从总体中不加任何分组、划类、排队等,完全随机地抽取受试对象。特点是每个个体(样品)被抽中的概率相等,各样品之间完全独立,彼此间无一定的关联性和排斥性。简单随机抽样是其他各种抽样形式的基础。通常只是在总体样品之间差异程度较小和数目较少时,采用这种方法。

例1:从编号为1到20的人中用简单随机化的方法抽取10名作为受试者。

用SAS9.1.3实现简单随机抽样的程序如下:

data a;

input id sex$ age; cards;

1 F 60

2 F 64

………

20 F 42

;

run;ods html;

proc surveyselect data=a method=srs n=10 out=b; run;

proc print data=b;

run;

ods html close;

程序说明:首先,创建SAS数据集名为a。然后,调用SURVEYSELECT过程进行随机抽样,并指定一些抽样选项,其中“data=”指定输入数据集,用于指定抽样框;“method=”

用于指定随机抽样的方法,srs表示单纯随机抽样;“n=”用于指定抽样大小(此处可以用“rate=”来替换,用于指定抽样率);“out=”用于指定输出数据集,它包含所有被抽到的样本(可以添加选项“rep=number”来规定重复抽样的次数,如“rep=2”命令系统同时抽取2份样本)。最后用PROC PRINT把输出数据集b在输出窗口中显示出来。命令ods html 和ods html close用于把程序运行结果以网页格式保存下来。

输出结果如下:

Selection Method Simple Random Sampling

Input Data Set A

Random Number Seed 937359000

Sample Size 10

Selection Probability 0.5

Sampling Weight 2

Output Data Set B

以上是本次单纯随机抽样的基本信息,抽样方法是简单随机抽样(Simple Random Sampling)。由于未指定SEED=选项来规定初始种子,来产生随机数字流。系统使用默认种子作为初始种子(SEED=937359000),如果将来想重新抽取与本次完全相同的样本,可以在抽样时指定同一种子。抽取的样本大小是10。抽样概率(Selection Probability)是指样本被抽中的概率,此处为0.5。对于无分层的单纯随机抽样,样本的抽样概率是一致的。抽样权重(Sampling Weight)是抽样概率的倒数,反映样本信息量的大小。

Obs id sex age

1 5 F 41

2 6 F 31

3 10 M 16

4 11 M 58

5 12 M 63

6 13 F 23

7 15 F 20

8 16 F 33

9 19 F 49

10 20 F 42

以上是PROC PRINT命令显示的输出数据集,包括所有被抽中的样本。第二列id显示了被抽中的病人的编号。

1.2 分层随机抽样的实现

分层抽样,先依据一种或几种特征将总体分为若干个子总体,每个子总体称作一个层,然后从每层中随机抽取一个子样本,这些子样本合起来就是总体的样本。分层抽样所得的样本具有较好的代表性,抽样误差较小。

程序说明:数据步与例1相同,此处省略。过程步,SORT过程用于将数据集a排序,by语句指明按性别进行排序,此处排序方式为先F后M。SURVEYSELECT过程与例1的不同之处在于选项n=(6 4),规定每层中得抽样大小,若每层抽样大小相同,可写为n=n1的形式。此外,还多了一个STRATA语句,该语句用于指定分层变量。

主要SAS输出结果如下:

Obs sex id age SelectionProb SamplingWeight

1 F 4 57 0.5 2

2 F 6 31 0.5 2

3 F 13 23 0.5 2

4 F 1

5 20 0.5 2

5 F 19 49 0.5 2

6 F 20 42 0.5 2

7 M 3 37 0.5 2

8 M 8 64 0.5 2

9 M 11 58 0.5 2

10 M 18 40 0.5 2

1.3 系统随机抽样的实现

系统抽样,先按照某种顺序将总体中的个体(样品)从1~N相继编号,并计算抽样距离K=N/n。式中N为总体样品总数,n为样本容量。然后在1~K中抽一随机数i,作为样本的第一个被抽样品,接着取i+K,i+2K,…,i+(n-1)K,直至抽够n个样品为止。值得注意的是,当总体的被观察样品按顺序有周期趋势或增加(减少)趋势时,容易产生偏倚。

语句用于指定排序的变量。

SAS输出结果如下:

Obs sex age id

1 F 57 4

2 M 64 8

3 M 63 12

4 F 33 16

5 F 42 20

1.4整群抽样的实现

整群抽样是先将总体分成若干群,从中随机抽取几个群;抽中群内的全部个体(样品)组成样本。可将整群抽样转化为简单随机抽样。例如,从10班随机抽取5个班作为受试对象,可看做从10个个体中随机抽取5个,即为简单随机抽样。

2. 随机分组

利用SAS软件实现随机分组的途径有很多,目前比较常用的是SAS/STAT模块的PLAN 过程,它可用于构建各种常见的试验设计并对设计方案进行随机化,也可用于产生数字的排列组合表。笔者将介绍如何利用PLAN过程来实现两组和多组的随机分组。

2.1完全随机化的实现

完全随机化,直接对受试对象进行随机化分组,常通过掷硬币或随机数字表,或用计算机产生随机数来进行随机化,在事先或者实施过程中不作任何限制和干预或调整。分组后各组受试对象的例数不一定相等。

例4:将表1中的20例病人随机分为2组。

用SAS9.1.3实现简单随机分组的程序如下:

proc plan seed=20101216; /*第一步*/ factors a=20;

output out=sheji;

run;

data b c; /*第二步*/ set sheji;

patient=_n_;

if a<=10 then do; group='A'; output b; end;

else do; group='B';

output c;end;

run;

data d; /*第三步*/ set b;

group1=group;

patient1=patient;

keep group1 patient1;

run; data e; /*第四步*/ set c;

group2=group;

patient2=patient;

keep group2 patient2;

run;

data f; /*第五步*/ merge d e;

run;

ods html;

proc print noobs; /*第六步*/ run;

ods html close;

程序说明:第一步,调用PLAN过程产生20个随机排列数,并把结果输出至数据集sheji 中,选项seed=,规定产生随机数的种子。第二步,对数据集sheji进行操作,把病人按随机排列数进行分组,随机数小于等于10的进入A组,其余进入B组,并将结果分别保存至数据集b和c中。第三步和第四步,分别将数据集b、c中的group改为group1、group2,将patient改为patient1和patient2,生成新的数据集d和e。最后把数据集d和e合并为新的数据集f,并通过PRINT过程将随机分组的结果展现出来。

SAS输出结果如下:

group1 patient1 group2 patient2

A 4

B 1

A 5

B 2

A 7

B 3

A 8

B 6

group1 patient1 group2 patient2

A 10

B 9

A 11

B 14

A 12

B 15

A 13

B 16

A 17

B 18

A 19

B 20

例5 将这20例病人随机分为4组。

用SAS9.1.3实现简单随机分组的程序如下[3]:

proc plan seed=20101216;

factors a=20;

output out=sheji;

run;

data b1 b2 b3 b4;

set sheji;

patient=_n_;

if a<=5 then do; group='A'; output b1; end;

if 6<=a<=10 then do; group='B'; output b2; end;

if 11<=a<=15 then do; group='C'; output b3; end;

if 16<=a then do;group='D'; output b4;end;

run;

data d1;

set b1;

group1=group;

patient1=patient;

keep group1 patient1;

run; data d3;

set b3;

group3=group;

patient3=patient;

keep group3 patient3; run;

data d4;

set b4;

group4=group;

patient4=patient;

keep group4 patient4; run;

data f;

merge d1 d2 d3 d4; run;

ods html;

proc print noobs;

run;

ods html close;

SAS输出结果如下:

group1 patient1 group2 patient2 group3 patient3 group4 patient4

A 5

B 4

C 1

D 2

A 7

B 8

C 6

D 3

A 10

B 11

C 9

D 14

A 13

B 12

C 15

D 18

A 19

B 17

C 16

D 20

2.2 分层随机化的实现

分层随机化,首先对可能影响实验过程和结果的主要混杂因素(如年龄、性别、病情、

疾病分期等)进行分层,然后在每一层内进行完全随机化分组,最后分别合并为实验组和对照组。配对随机化和区组随机化可看成是分层随机化的实际应用。

例6将表1中的20例病人以性别为区组因素,随机分为2组。

将20例病人中的12名女性,编号为1-12,按例4中的程序分为2组;8名为男性,编号为1-8,按例4中的程序分为2组,可以实现对这20例病人的区组随机化。

例7现有来自3个窝别的24只大鼠,以窝别为区组因素,随机为4组,每组6只。

①对大鼠进行编号,第一窝编号为1~8,第二窝编号为9~16,第三窝编号为17~24。

用SAS9.1.3实现区组随机化的程序如下[3,4]:

proc plan seed=201200505;

factors block=3 length=8;

output out=sheji;

run;

data a b c d;

set sheji;

mouse=_n_;

if length<=2 then

do;group='A';output a;end;

else if 3<=length<=4 then

do;group='B';output b;end;

else if 5<=length<=6 then

do;group='C';output c;end;

else do;group='D';output d;end; run;

data aa;

set a;

group1=group;

mouse1=mouse;

keep group1 mouse1;

run; data bb;

set b;

group2=group;

mouse2=mouse;

keep group2 mouse2; run;

data cc;

set c;

group3=group;

mouse3=mouse;

keep group3 mouse3; run;

data dd;

set d;

group4=group;

mouse4=mouse;

keep group4 mouse4; run;

data e;

merge aa bb cc dd; run;

ods html;

proc print noobs; run;

ods html close;

SAS输出结果:

group1 mouse1 group2 mouse2 group3 mouse3 group4 mouse4

A 2

B 1

C 3

D 6

A 4

B 8

C 5

D 7

A 9

B 11

C 10

D 12

A 15

B 16

C 13

D 14

A 17

B 23

C 18

D 21

A 19

B 24

C 20

D 22

2.3 分层区组随机化

在多中心试验中,区组随机化可以按中心分层进行,又称为分层的区组随机化。

例8 若有来自2个种系的大鼠,分别24只,每个种系分为各3个窝别,随机分为4组,每组12只。

只需在例7的程序中,将“factors block=3 length=8”改为“factors center=2 block=3 length=8”即可[4]。

2.4 动态随机化

在临床实验研究中,研究者常习惯将患者分为实验组与对照组,患者来医院就诊,若将先来就诊的分入实验组,后来就诊的分入对照组,是不正确的。因为患者来医院就诊,在患病严重程度、患病时间等重要非实验因素方面不一定是均衡的,可能带有某种程度上的“聚集性”,即某一段时间上来的患者多数为重病患者,另一段时间上来的多数为轻病患者;若规定第一个来就诊者分入实验组,第二个来就诊者分入对照组,这样交叉进行分组,最后也可能两组患者在某些重要非实验因素方面相差悬殊,组间缺乏均衡性。有一种简便易行的随机化分组方法叫“按不平衡指数最小的分配原则”分组[5]。此法也称为动态随机化法。

前面的讲座中已经介绍了动态随机化的方法[1]。此处不再赘述。

SAS中的SQL语句大全

S A S中的S Q L语句完全教程之一:S Q L简介与基本查询功能本系列全部内容主要以《SQLProcessingwiththeSASSystem(CourseNotes)》为主进行讲解,本书是在网上下载下来的,但忘了是在哪个网上下的,故不能提供下载链接了,需要的话可以发邮件向我索取,我定期邮给大家,最后声明一下所有资料仅用于学习,不得用于商业目的,否则后果自负。 1SQL过程步介绍 过程步可以实现下列功能: 查询SAS数据集、从SAS数据集中生成报表、以不同方式实现数据集合并、创建或删除SAS数据集、视图、索引等、更新已存在的数据集、使得SAS系统可以使用SQL 语句、可以和SAS的数据步进行替换使用。注意,SQL过程步并不是用来代替SAS数据步,也不是一个客户化的报表工具,而是数据处理用到的查询工具。 过程步的特征 SQL过程步并不需要对每一个查询进行重复、每条语句都是单独处理、不需要print 过程步就能打印出查询结果、也不用sort过程步进行排序、不需要run、要quit来结束SQL过程步 过程步语句 SELECT:查询数据表中的数据 ALTER:增加、删除或修改数据表的列 CREATE:创建一个数据表 DELETE:删除数据表中的列 DESCRIBE:列出数据表的属性 DROP:删除数据表、视图或索引

RESET:没用过,不知道什么意思 SELECT:选择列进行打印 UPDATE:对已存在的数据集的列的值进行修改 2SQL基本查询功能 语句基本语法介绍 SELECTobject-item<,...object-item> FROMfrom-list > >; 这里SELECT:指定被选择的列 FROM:指定被查询的表名 WHERE:子数据集的条件 GROUPBY:将数据集通过group进行分类 HAVING:根据GROUPBY的变量得到数据子集 ORDERBY:对数据集进行排序 语句的特征 选择满足条件的数据、数据分组、对数据进行排序、对数据指定格式、一次最多查询32个表。这里还要提到的就是,在SAS系统中,对于表名和变量名一般不超过32个字符,对于库名,文件引用名,格式等不能超过8个字符 关键字 Validate关键字只存在于select语句中、可以在不运行查询的情况下测试语句的语

SAS常用函数大全

一、数学函数 ABS(x) 求x的绝对值。 MAX(x1,x2,…,xn) 求所有自变量中的最大一个。 MIN(x1,x2,…,xn) 求所有自变量中的最小一个。 MOD(x,y) 求x除以y的余数。 SQRT(x) 求x的平方根。 ROUND(x,eps) 求x按照eps指定的精度四舍五入后的结果,比如 ROUND(5654.5654,0.01) 结果为5654.57,ROUND(5654.5654,10)结果为5650。 CEIL(x) 求大于等于x的最小整数。当x为整数时就是x本身,否则为x右边最近的整数。 FLOOR(x) 求小于等于x的最大整数。当x为整数时就是x本身,否则为x左边最近的整数。 INT(x) 求x扔掉小数部分后的结果。 FUZZ(x) 当x与其四舍五入整数值相差小于1E-12时取四舍五入。 LOG(x) 求x的自然对数。 LOG10(x) 求x的常用对数。 EXP(x) 指数函数。 SIN(x), COS(x), TAN(x) 求x的正弦、余弦、正切函数。 ARSIN(y) 计算函数y=sin(x)在区间的反函数,y取[-1,1]间值。 ARCOS(y) 计算函数y=cos(x)在的反函数,y取[-1,1]间值。 ATAN(y) 计算函数y=tan(x)在的反函数,y取间值。 SINH(x), COSH(x), TANH(x) 双曲正弦、余弦、正切 ERF(x) 误差函数 GAMMA(x) 完全函数

此外还有符号函数SIGN,函数一阶导数函数DIGAMMA,二阶导数函数TRIGAMMA ,误差函数余函数ERFC,函数自然对数LGAMMA,ORDINAL函数,AIRY 函数,DAIRY 函数,Bessel函数JBESSEL,修正的Bessel函数IBESSEL,等等。 二、数组函数 数组函数计算数组的维数、上下界,有利于写出可移植的程序。数组函数包括: DIM(x) 求数组x第一维的元素的个数(注意当下界为1时元素个数与上界相同,否则元素个数不一定与上界相同)。 DIM k(x) 求数组x第k维的元素的个数。 LBOUND(x) 求数组x第一维的下界。 HBOUND(x) 求数组x第一维的上界。 LBOUND k(x) 求数组x第 k维的下界。 HBOUND k(x) 求数组x第 k维的上界。 三、字符函数 较重要的字符函数有: TRIM(s) 返回去掉字符串s的尾随空格的结果。 UPCASE(s) 把字符串s中所有小写字母转换为大写字母后的结果。 LOWCASE(s) 把字符串s中所有大写字母转换为小写字母后的结果。 INDEX(s,s1) 查找s1在s中出现的位置。找不到时返回0。 RANK(s) 字符s的ASCII码值。 BYTE(n) 第n个ASCII码值的对应字符。 REPEAT(s,n) 字符表达式s重复n次。

SAS中的SQL语句大全

SAS中的SQL语句完全教程之一:SQL简介与基本查询功能 本系列全部内容主要以《SQL Processing with the SAS System (Course Notes)》为主进行讲解,本书是在网上下载下来的,但忘了是在哪个网上下的,故不能提供下载链接了,需要的话可以发邮件向我索取,我定期邮给大家,最后声明一下所有资料仅用于学习,不得用于商业目的,否则后果自负。 1 SQL过程步介绍 SQL过程步可以实现下列功能: 查询SAS数据集、从SAS数据集中生成报表、以不同方式实现数据集合并、创建或删除SAS数据集、视图、索引等、更新已存在的数据集、使得SAS系统可以使用SQL语句、可以和SAS的数据步进行替换使用。注意,SQL过程步并不是用来代替SAS数据步,也不是一个客户化的报表工具,而是数据处理用到的查询工具。 SQL过程步的特征 SQL过程步并不需要对每一个查询进行重复、每条语句都是单独处理、不需要print过程步就能打印出查询结果、也不用sort过程步进行排序、不需要run、要quit来结束SQL 过程步 SQL过程步语句 SELECT:查询数据表中的数据 ALTER:增加、删除或修改数据表的列 CREATE:创建一个数据表 DELETE:删除数据表中的列 DESCRIBE:列出数据表的属性 DROP:删除数据表、视图或索引 INSERT:对数据表插入数据 RESET:没用过,不知道什么意思 SELECT:选择列进行打印 UPDATE:对已存在的数据集的列的值进行修改 2 SQL基本查询功能 SELECT语句基本语法介绍 SELECT object-item <, ...object-item> FROM from-list > >; 这里SELECT:指定被选择的列 FROM:指定被查询的表名

SAS软件学习总结

SAS软件知识要点总结 李明 注意:数据集要有名字,变量要有名字,所以 SAS 中对名字(数据集名、变量名、数据库名,等等)有约定:SAS 名字由英文字母、数字、下划线组成,第一个字符必须是字母或下划线,名字最多用8 个字符,大写字母和小写字母不区分。比如,name,abc,aBC,x1,year12,_NULL_等是合法的名字,且abc 和aBC 是同一个名字,而class-1(不能有减号)、a bit(不能有空格)、serial#(不能有特殊字符)、Documents(超长)等不是合法的名字。 二、MODEL 语句 MODEL 语句在一些统计建模过程中用来指定模型的形式。其一般形式为 MODEL 因变量=自变量表 / 选项; 比如 model math=chinese; 即用语文成绩预测数学成绩。 注意:MODEL就是指出谁是因变量,谁是自变量; 三、BY 语句和CLASS 语句 BY语句在过程中一般用来指定一个或几个分组变量,根据这些分组变量值把观测分组,然后对每一组观测分别进行本过程指定的分析。在使用带有BY 语句的过程步之前一般先用 SORT 过程对数据集排序 注意:BY语句就是按某给定指标分类(组) 在一些过程(如方差分析)中,使用CLASS 语句指定一个或几个分类变量,它实际相当于因变量。而在另一些过程(如MEANS)中,CLASS 语句作用与BY 语句类似,可以指 定分类变量,把观测按分类变量分类后分别进行分析。使用CLASS 时不需要先按分类变量 排序。

注意:CLASS语句的作用有两个:1.指定(分类变量),本身就是因变量; 2.与BY类似,指定分类变量并分类; 四、OUTPUT 语句 在过程步中经常用 OUTPUT 语句指定输出结果存放的数据集。不同过程中把输出结果存入数据集的方法各有不同,OUTPUT 语句是用得最多的一种,其一般格式为: OUTPUT OUT=输出数据集名关键字=变量名关键字=变量名?; 其中用OUT=给出了要生成的结果数据集的名字,用“关键字=变量名”的方式指定了输 五、FREQ 语句和WEIGHT 语句 FREQ 语句指定一个重复数变量,每个观测中此变量的值说明这个观测实际代表多少个完全相同的重复观测。FREQ 变量只取整数值。如 freq numcell; WEIGHT 语句指定一个权重变量,在某些允许加权的过程中代表权重,其值与观测对应的方差的倒数成比例。 注意:FREQ是计量频数的;WEIGHT则是计量权重的; 七、WHERE语句(就是条件句) 用WHERE 语句可以选择输入数据集的一个行子集来进行分析,在WHERE 关键字后指定一个条件。比如: where math>=60 and chinese>=60; 指定只分析数学、语文成绩都及格的学生。

SAS学习系列26 Logistic回归

26. Logistic回归 (一)Logistic回归 一、原理 二元或多元线性回归的因变量都是连续型变量,若因变量是分类变量(例如:患病与不患病;不重要、重要、非常重要),就需要用Logistic回归。 Logistic回归分析可以从统计意义上估计出在其它自变量固定不变的情况下,每个自变量对因变量取某个值的概率的数值影响大小。 Logistic回归模型有“条件”与“非条件”之分,前者适用于配对病例对照资料的分析,后者适用于队列研究或非配对的病例-对照研究成组资料的分析。 对于二分类因变量,y=1表示事件发生;y=0表示事件不发生。事件发生的条件概率P{ y=1 | x i } 与x i之间是非线性关系,通常是单调的,即随着x i的增加/减少,P{ y=1 | x i } 也增加/减少。 Logistic函数F(x)=,图形如下图所示:

该函数值域在(0,1)之间,x趋于-∞时,F(x)趋于0;x趋于+∞时,F(x)趋于1. 正好适合描述概率P{ y=1 | x i }. 例如,某因素x导致患病与否:x在某一水平段内变化时,对患病概率的影响较大;而在x较低或较高时对患病概率影响都不大。 记事件发生的条件概率P{ y=1 | x i } = p i,则 p i == 记事件不发生的条件概率为 1- p i = 则在条件x i下,事件发生概率与事件不发生概率之比为 = 称为事件的发生比,简记为odds. 对odds取自然对数得到 上式左边(对数发生比)记为Logit(y), 称为y的Logit变换。可见变

换之后的Logit(y)就可以用线性回归,计算出回归系数α和β值。 若分类因变量y 与多个自变量x i 有关,则变换后Logit(y)可由多元线性回归: 11logit()ln()1k k p p x x p αββ==++- 或 111() 1(1|, ,)1k k k x x p y x x e αββ-++==+ 二、回归参数的解释 1. 三个名词 发生比(odds )= = 例如,事件发生概率为0.6,不发生概率为0.4,则发生比为1.5(发生比>1,表示事件更可能发生)。 发生比率(OR )= = = = 即主对角线乘积/副对角线乘积,也称为交叉积比率,优势比。例如, 说明:大于1(小于1)的发生比率,表明事件发生的可能性会提高(降低),或自变量对事件概率有正(负)的作用;发生比率为1表示变量对事件概率无作用。

一些常用的SAS命令

常用SAS命令 1. SAS的子窗口主要有浏览器窗口(EXPLORER)、结果窗口(RESULTS)、程序编辑器窗口(program editor)、日志窗口(log)、输出窗口(output); 2.切换至日志窗口的命令是log、热键是F6;切换至输出窗口的命令是output、热键是F7; 3.提交SAS程序的命令是submit; 4. SAS系统是大型集成软件系统,具备完备的数据访问、管理、分析和呈现及应用开发功能; 5. SAS数据集是一类由SAS系统建立、维护和管理的数据文件; 6.为了实现存储和管理面向对象的开发任务,SAS建立目录册(catalog)类型的文件,在这一类文件中可以存储整个应用系统,包括它的界面,源程序和各种对象间的连接; 7. SAS逻辑库是一个逻辑概念,一个逻辑库就是存放在同一文件夹或

几个文件夹中的一组SAS文件; 8.在SAS软件系统的信息组织中,总共只有两个层次:SAS逻辑库是高一级的层次,低一级的层次就是SAS文件本身; 9.在SAS系统中,为便于访问一个SAS文件,要为该SAS文件所在的位置指定一个SAS逻辑库,即赋予一个逻辑库名,在指定逻辑库名后,就可使用两级命名的方式引用SAS文件:逻辑库名.文件名; 10.在每个SAS进程一开始,系统就自动地指定了一些逻辑库供用户使用,它们是WORK、SASHELP和SASUSER; 11.在每个SAS进程开始时系统缺省地创建名为work的SAS逻辑库,它是一个临时逻辑库,在引用WORK库中的SAS文件时,可省略逻辑库名; 12.永久逻辑库是指它的内容在当前SAS进程结束时仍被保留的SAS 逻辑库,在SAS系统中除了库名为WORK以外的逻辑库都是永久库; 13. Sashelp包含所安装SAS系统各个产品有关的SAS文件,运行安装的SAS系统所需要的SAS文件缺省地存储在这个逻辑库中;

sas函数大全

sas函数大全 一、数学函数 ABS(x) 求x的绝对值。 MAX(x1,x2,…,xn) 求所有自变量中的最大一个。 MIN(x1,x2,…,xn) 求所有自变量中的最小一个。 MOD(x,y) 求x除以y的余数。 SQRT(x) 求x的平方根。 ROUND(x,eps) 求x按照eps指定的精度四舍五入后的结果,比如ROUND(5654.5654,0.01) 结果为5654.57,ROUND(5654.5654,10)结果为5650。 CEIL(x) 求大于等于x的最小整数。当x为整数时就是x本身,否则为x右边最近的整数。FLOOR(x) 求小于等于x的最大整数。当x为整数时就是x本身,否则为x左边最近的整数。 INT(x) 求x扔掉小数部分后的结果。 FUZZ(x) 当x与其四舍五入整数值相差小于1E-12时取四舍五入。 LOG(x) 求x的自然对数。 LOG10(x) 求x的常用对数。 EXP(x) 指数函数。 SIN(x), COS(x), TAN(x) 求x的正弦、余弦、正切函数。 ARSIN(y) 计算函数y=sin(x)在区间的反函数,y取[-1,1]间值。 ARCOS(y) 计算函数y=cos(x)在的反函数,y取[-1,1]间值。 ATAN(y) 计算函数y=tan(x)在的反函数,y取间值。 SINH(x), COSH(x), TANH(x) 双曲正弦、余弦、正切 ERF(x) 误差函数 GAMMA(x) 完全函数 此外还有符号函数SIGN,函数一阶导数函数DIGAMMA,二阶导数函数TRIGAMMA ,误差函数余函数ERFC,函数自然对数LGAMMA,ORDINAL函数,AIRY 函数,DAIRY函数,Bessel函数JBESSEL,修正的Bessel函数IBESSEL,等等。 二、数组函数 数组函数计算数组的维数、上下界,有利于写出可移植的程序。数组函数包括: DIM(x) 求数组x第一维的元素的个数(注意当下界为1时元素个数与上界相同,否则元素个数不一定与上界相同)。 DIM k(x) 求数组x第k维的元素的个数。 LBOUND(x) 求数组x第一维的下界。 HBOUND(x) 求数组x第一维的上界。 LBOUND k(x) 求数组x第 k维的下界。 HBOUND k(x) 求数组x第 k维的上界。 三、字符函数 较重要的字符函数有: TRIM(s) 返回去掉字符串s的尾随空格的结果。 UPCASE(s) 把字符串s中所有小写字母转换为大写字母后的结果。 LOWCASE(s) 把字符串s中所有大写字母转换为小写字母后的结果。 INDEX(s,s1) 查找s1在s中出现的位置。找不到时返回0。 RANK(s) 字符s的ASCII码值。 BYTE(n) 第n个ASCII码值的对应字符。 REPEAT(s,n) 字符表达式s重复n次。 SUBSTR(s,p,n) 从字符串s中的第p个字符开始抽取n个字符长的子串

常用sas语句总结

Engine(引擎)是一种访问架构,SAS系统通过它迅速地对其它数据库管理系统中文件进行读入和写出。 1.LIBNAME语句 1.1解读 定义SAS 逻辑库。具体地说,它可以 (1)向SAS 标识SAS 逻辑库 (2)将引擎与逻辑库关联 (3)让您指定逻辑库的选项 (4)为逻辑库指定逻辑库引用名 通俗得讲,LIBNAME语句把一个libref(库标记名)和一个目录联系起来,使用户可以在SAS语句中使用库标记来指示这个目录。提交该程序时自动引用该SAS 逻辑库 1.2 语句格式 1、LIBNAME libref <'SAS-data-library'>; 2、LIBNAME libref Clear; 3、LIBNAME libref |_ All_ List; 三种格式反映了LIBNAME语句的三种用法

选项说明 2.length语句 SAS变量的基本类型有两种:数值型和字符型。数值型变量在数据集中的存贮一般使用8个字节。SAS的字符型变量缺省的长度是8个英文字符,可以使用LENGTH语句指定变量长度,LENGTH语句一般应出现在定义变量的Input语句之前,格式为:LENGTH 字符型变量名$长度 例如:length name $20 ; 3. input 语句 3.1解读 INPUT语句用于向系统表明如何读入每一条记录。它的主要功能有:读入由语句指定的数据列;为相应

的数据域定义变量名;确定变量的读入模式(共有四种模式:column模式,formatted模式,list模式及named模式)。 input语句执行后,SAS将读取的数据暂时先保存在内存缓冲区,然后执行后面的语句,后面的语句可以对暂存在内存缓冲区中的变量值进行修改,到最后才将整条数据写入数据集,写入数据集的数据就不能在当前data步中再修改。 注意:INFILE语句用于确定一个包含原始数据的外部文件,必须在执行INPUT语句前执行,如果要在程序中直接嵌入数据,就用CARDS语句代替INFILE 语句。 3.2 语句格式(Column模式) INPUT variable <$> start-column<-end-column><.decimals><@|@@>; 说明: variable 变量名 $ 跟在变量后面,表明这个变量是字符型变量 start-column 起始列号 end-column 结束列号,如果变量值只包含一列,则可省略 .decimals 如果输入值中没有包含一个隔开整数部分

sas常用函数

Sas常用函数(转) 一、数学函数 ABS(x) 求x的绝对值。 MAX(x1,x2,…,xn) 求所有自变量中的最大一个。 MIN(x1,x2,…,xn) 求所有自变量中的最小一个。 MOD(x,y) 求x除以y的余数。 SQRT(x) 求x的平方根。 ROUND(x,eps) 求x按照eps指定的精度四舍五入后的结果,比如ROUND(5654.5654,0.01) 结果为5654.57,ROUND(5654.5654,10)结果为5650。 CEIL(x) 求大于等于x的最小整数。当x为整数时就是x本身,否则为x右边最近的整数。 FLOOR(x) 求小于等于x的最大整数。当x为整数时就是x本身,否则为x左边最近的整数。 INT(x) 求x扔掉小数部分后的结果。 FUZZ(x) 当x与其四舍五入整数值相差小于1E-12时取四舍五入。 LOG(x) 求x的自然对数。 LOG10(x) 求x的常用对数。 EXP(x) 指数函数。 SIN(x), COS(x), TAN(x) 求x的正弦、余弦、正切函数。 ARSIN(y) 计算函数y=sin(x)在区间的反函数,y取[-1,1]间值。 ARCOS(y) 计算函数y=cos(x)在的反函数,y取[-1,1]间值。 ATAN(y) 计算函数y=tan(x)在的反函数,y取间值。 SINH(x), COSH(x), TANH(x) 双曲正弦、余弦、正切 ERF(x) 误差函数 GAMMA(x) 完全函数

此外还有符号函数SIGN,函数一阶导数函数DIGAMMA,二阶导数函数TRIGAMMA ,误差函数余函数ERFC,函数自然对数LGAMMA,ORDINAL函数,AIRY 函数,DAIRY函数,Bessel 函数JBESSEL,修正的Bessel函数IBESSEL,等等。 二、数组函数 数组函数计算数组的维数、上下界,有利于写出可移植的程序。数组函数包括: DIM(x) 求数组x第一维的元素的个数(注意当下界为1时元素个数与上界相同,否则元素个数不一定与上界相同)。 DIM k(x) 求数组x第k维的元素的个数。 LBOUND(x) 求数组x第一维的下界。 HBOUND(x) 求数组x第一维的上界。 LBOUND k(x) 求数组x第k维的下界。 HBOUND k(x) 求数组x第k维的上界。 三、字符函数 较重要的字符函数有: TRIM(s) 返回去掉字符串s的尾随空格的结果。 UPCASE(s) 把字符串s中所有小写字母转换为大写字母后的结果。 LOWCASE(s) 把字符串s中所有大写字母转换为小写字母后的结果。 INDEX(s,s1) 查找s1在s中出现的位置。找不到时返回0。 RANK(s) 字符s的ASCII码值。 BYTE(n) 第n个ASCII码值的对应字符。 REPEAT(s,n) 字符表达式s重复n次。 SUBSTR(s,p,n) 从字符串s中的第p个字符开始抽取n个字符长的子串 TRANWRD(s,s1,s2) 从字符串s中把所有字符串s1替换成字符串s2后的结果。

SAS复习总结

蔡泽蕲 Freq 过程: Proc Freq data=dataset; table x*y/option; By var1; Class var2; Weight f; Run; 输出x*y的频数表,by语句的使用要求var1已经排过序. option可为chisp,分析x、y(两独立样本)的不同水平的差异是否显著,卡方检验。当x、y为两配对样本时,option为agree,进行配对样本差异是否显著的检验。 Sort 过程: Proc sort data=dataset out=dataset; By (descending) var1 (descending) var2; Run; 对数据集中的var1、var2变量依次排序,默认从小到大,descending为从大到小。缺失out 时新数据集覆盖原数据集。 Means 过程 Proc means data=dataset option; Var x; By var1; Class var2; Freq var3; /*不能用weight*/ Output out=输出数据集统计量名=自定义名; Run; 输出option统计量,当包含t和prt 时输出x的期望为0的t检验,用于配对样本的t检验。无option时,默认输出N、std、mean、min、max五个统计量。还可输出其它很多统计计量。特别的两个选项:maxdec=n ,alpha=value分别指定结果保留位数和置信度 Univariate 过程 Proc univariate data=dataset option; Var x; By var1; Freq var2; Output out=输出数据集统计量=自定义变量名; Run; Option 可为freq(生成频数表)、normal(检验变量是否服从正态分布)、plot(生成茎叶图、箱线图、正太概率图)、cibasic(计算均值置信区间)、cipctldf(计算中位数置信区间)。 统计量可为:各检验统计量及分位数。 当option为“mu0=scalar”时,计算x的期望(中位数)为scalar的t检验和符号秩和检验。符号秩和检验适用于非正太样本,而t检验则用于正太样本。配对样本计算配对差,独立样本使用class。Cibasic基于正太分布,cipctldf基于非正态分布。

SAS常用的随机数函数简介文档

运用SAS进行Monte Carlo蒙特卡罗模拟(第五弹): SAS常用的随机数函数简介 前一篇文章我们介绍了两种产生随机数序列的方法,即随机数函数产生随机数序列,其语法为:var = name(seed,)和CALL子程序产生随机数序列,其语法为:call name(seed,,var)。本节我们将介绍SAS常用的随机数函数(其概率函数我们这里就不作详细介绍,感兴趣的话请查阅相关文献;SAS随机数函数中的seed均为随机数种子): SAS随机数函数分布情况参数说明 RANBIN(seed,n,p) 二项分布n:独立实验的次数,p:成功的概率 RANCAU(seed) 柯西分布 RANEXP(seed) 指数分布 RANGAM(seed,a) 伽玛分布 a:a>0,形状参数 RANNOR(seed) 正态分布 NORMAL(seed) 正态分布 RANPOI(seed,m) 泊松分布m:m>0,均值 RANTBL(seed,p1,p2,...p n) 离散分布p(i):p(i) >0,且Σp(i)=1,概率 RANTRI(seed,h) 三角分布h:0<=h<=1,斜边 RANUNI(seed) 均匀分布 UNIFORM(seed) 均匀分布 这里要注意:Functions RANUNI and UNIFORM are identical. Function UNIFORM cannot be utilized as a CALL routine.

文章中还举例说明了用上述基础的SAS随机数函数通过变换,可以产生很多有趣的分布,本人对此没有研究,请大家查看相关文献。所有的SAS随机数函数都是通过RANUNI随机 数函数变换得到的,例如我们通过就可以得到一个正态分布,通过e=-ln(u3)就可以得到指数分布。通过下面的例子我们可以证明刚才的结论:程序一: DATA TEMP5(DROP=I); DO I=1 TO 12; RUNI=RANUNI(123); OUTPUT; END; RUN; PROC PRINT DATA=TEMP5; RUN; 程序二: DATA TEMP6(DROP=I); DO I=1 TO 3; RUNI=RANUNI(123); RNOR=RANNOR(456); REXP=RANEXP(789);

ARIMA预测原理以及SAS实现代码

█ARIMA定义 ARIMA的完整写法为ARIMA(p,d,q) ?其中p为自回归系数,代表数据呈现周期性波动 ?d为差分次数,代表数据差分几次才能达到平稳序列 ?q为移动平均阶数,代表数据为平稳序列,可以用移动平均来处理。 █平稳性检测方法 ?方法一:时序图 序列始终在一个常数值附近随机波动,且波动范围有界,且没有明显的趋势性或周期性,所以可认为是平稳序列。下图明显不是一个平稳序列 proc gplot data=gdp; plot gdp*year=1 ; symbol c=red i=join v=star; run;

??方法二:自相关图 自相关系数会很快衰减向0,所以可认为是平稳序列。 proc arima data= gdp; identify var=gdp stationarity =(adf=3) nlag=12; run; ??ADF单位根检验(精确判断)

三个检验中只要有一个Pr卡方<0.05即可认定为通过白噪声检验。 proc arima data= gdp; identify var=gdp stationarity =(adf=3) nlag=12; run; █非平稳序列转换为平稳序列

方法一:将数据取对数。 方法二:对数据取差分dif函数 data gdp_log; set gdp; loggdp=log(gdp); cfloggdp=dif(loggdp); run; /**对数数据散点图**/ proc gplot; plot loggdp*year=1 ; symbol c=black i=join v=star; run; /* 一阶差分对数数据散点图*/ proc gplot; plot cfloggdp*year=1; symbol c=green v=dot i=join; run;

sas要点

; 循环体 ;end ; SAS 特有的循环语句) =值1,值2,…, end ; 表达式); 循环体 ; 至少执行一次循环表达式); 循环体 在LOG 窗口显示n=0,n=1 ; (n<3); PUT n=; n+1; 循环体 END ; ; (n>=3); PUT n=; ; 循环体 END ; 语句 ; DELETE () , ; 40者的信息 将当前观测送入数据集自动方式和OUTPUT 在数据步程序中不出那么,(一般是RUN 语句)2.利用OUTPUT OUTPUT 语"失效, 通过执行 PROC VAR 变量表; VAR 语句时, 系统依据BY ; BY x ; CLASS 变量表; CLASS 变量1="字符串1" 变量变量n="字符串n" i i 变量; (列)变量; ; 下列程序可以将SAS 数据集又转换dBASE 的库文件: ; ; ; (PLOT) ; ; ; ; ; PROC GPLOT ; PLOT y*x ; RUN ; 过程的格式 选项1; 图形说明1 图形说明2 /选项2; ; 1: 数据集名 指定绘图数据集。 语句后可以有一个或多个图形 为纵轴,x 为横轴,图形用默 "A"形成。 2有: :将PLOT 后的多个图形说明 ;这里的m 和n 是正 m 为指定的每页行数,n 为每行 和n 。 过程格式 选项; 语句;] ; 数据集名 指定被转置的数据 名 数据集被转置后,原 ?本选项中的“SAS”名就是为新变 SAS 名”后接自然数来 数据集名 给定转置后的新数 DATAn 。 名 SAS 名将作为转置后的 其值为原数 _NAME_的变量。 关键字(Keywords 或 Reserve )是系, 如例中PUT 、、FORMAT 、PROC 、 INFILE 和DO 都是SAS 语句除了赋值、累加、注释、 名(SAS Name ) 后跟字母、数字或下 SAS 名中出现。 名可能是变量(32个字符),数据集32个字符),输出格式(C :31 N :),过程(16),数组(32),逻辑库8)和文件逻辑(8)等的名字标识符。 语句是以SAS 关键字开头,由SAS 名、特 一个语句可以写一行或多行,但要以 多条语句可以写在一行, SAS 语句对英文字符不区分大小写。 便于程序阅 格式: 变量=表达式; 而后 格式: 变量+表达式 ;语句的功能是先计算 再将变量的当前值和表达而后将二者之和赋给变量。当为新引入的变量时,语句x=x+1 不能代x+1,因为前者的x 初始值是缺项值0。

SAS入门教程

第一章SAS系统概况 SAS(Statistic Analysis System)系统是世界领先的信息系统,它由最初的用于统计分析经不断发展和完善而成为大型集成应用软件系统;具有完备的数据存取、管理、分析和显示功能。在数据处理和统计分析领域,SAS系统被誉为国际上的标准软件系统。 SAS系统是一个模块化的集成软件系统。SAS系统提供的二十多个模块(产品)可完成各方面的实际问题,功能非常齐全,用户根据需要可灵活的选择使用。 ●Base SAS Base SAS软件是SAS系统的核心。主要功能是数据管理和数据加工处理,并有报表生成和描述统计的功能。Base SAS软件可以单独使用,也可以同其他软件产品一起组成一个用户化的SAS系统。 ●SAS/AF 这是一个应用开发工具。利用SAS/AF的屏幕设计能力及SCL语言的处理能力可快速开发各种功能强大的应用系统。SAS/AF采用先进的OOP(面向对象编程)的技术,是用户可方便快速的实现各类具有图形用户界面(GUI)的应用系统。 ●SAS/EIS 该软件是SAS系统种采用OOP(面向对象编程)技术的又一个开发工具。该产品也称为行政信息系统或每个人的信息系统。利用该软件可以创建多维数据库(MDDB),并能生成多维报表和图形。 ●SAS/INTRNET ●SAS/ACCESS 该软件是对目前许多流行数据库的接口组成的接口集,它提供的与外部数据库的接口是透明和动态的。 第二章Base SAS软件 第一节SAS编程基础 SAS语言的编程规则与其它过程语言基本相同。 SAS语句 一个SAS语句是有SAS关键词、SAS名字、特殊字符和运算符组成的字符串,并以分号(;)结尾。 注释语句的形式为:/*注释内容*/ 或*注释内容。 二、SAS程序 一序列SAS语句组成一个SAS程序。SAS程序中的语句可分为两类步骤:DA TA步和

SAS系统和数据分析PROC步中的通用语句

第十六课用在PROC步中的通用语句 当我们用DATA步创建好SAS数据集后,可以用SAS的一些PROC过程步来进一步的分析和处理它们。在DATA步中用户可以使用SAS的语句来编写自己的程序,以便能通过读入、处理和描述数据,创建符合自己特殊要求的SAS数据集。而后由一组组PROC步组成的程序进行后续分析和处理。 一、PROC程序的主要作用 ●读出已创建好的SAS数据集 ●用数据集中的数据计算统计量 ●将统计的结果按一定形式输出 在SAS系统中,计算统计量时,对于许多常用的和标准的统计计算方法,并不需要用户自己编写这些复杂的程序,而是通过过程的名字来调用一个已经为用户编写好的程序。用户通常只要编写调用统计过程前的准备处理程序和输出统计结果后的分析和管理程序。只有用户自己非常特殊的统计计算方法才需要用户自己编写相应的计算程序。 二、PROC过程语句 PROC语句用在PROC步的开始,并通过过程名来规定我们所要使用的SAS过程,对于更进一步的分析,用户还可以在PROC语句中使用一些任选项,或者附加其他语句及它们的任选项(如BY语句)来对PROC步规定用户所需要分析的更多细节。PROC语句的格式为: PROC 过程名<选项>; 过程名规定用户想使用的SAS过程的名字。例如,我们在前面常使用的打印过程名PRINT,对数值变量计算简单描述统计量的过程名MEANS。 选项规定这个过程的一个或几个选项。不同的过程规定的选项是不同的,因此,只有知道具体的过程才能确定具体的选项是什么。但是,在各个不同过程中使用选项时,下面三种选项的使用格式是共同的: ●Keyword ●Keyword=数值 ●Keyword=数据集 Keyword是关键字,第一种选项格式是某个具体过程进一步要求某个关键字;第二种选项格式是某个具体过程要求某个关键字的值,值可能是数值或字符串;第三种选项格式是某个具体过程要求输入或输出数据集。例如: PROC Print Data=class ; 过程Print,作用为打印输出数据集中的数据。选项为Data=class,关键字是Data,进一

SAS常用函数大全

引言 1. 字符函数 2. 日期和时间函数 3. 数组函数 4. 数学函数 5. 样本描述统计函数 6. 特殊函数 7. 随机数函数 8. 宏函数 9. 变量信息函数 10. 分布密度函数、分布函数 11. 分位数函数

一、字符函数 1. TRIM(s):返回去掉字符串s的尾随空格的结果。 2. UPCASE(s):把字符串s中所有小写字母转换为大写字母后的结果。 3. LOWCASE(s):把字符串s中所有大写字母转换为小写字母后的结果。 4. INDEX(s,s1):查找s1在s中出现的位置。找不到时返回0。 5. RANK(s):字符s的ASCII码值。 6. BYTE(n):第n个ASCII码值的对应字符。 7. REPEAT(s,n):字符表达式s重复n次。 8. SUBSTR(s,p,n):从字符串s中的第p个字符开始抽取n个字符长的子串 9. TRANWRD(s,s1,s2):从字符串s中把所有字符串s1替换成字符串s2后的结果。 10. PROPCASE(s):把字符串s的第一个字母大写。 11. CATX(d,s1,s2):把字符串s1和字符串s2通过d(如'-')连接返回结果。 12. COMPBL(s):把字符串s中的不同长度空格变为长度为1的空格返回结果。 13. COMPRESS(s,c,m):将字符串c(默认为空格)从字符串中移除,m为对d的添加项如下: d增加数字到初始字符里(chars)。 f增加下划线和字母(A-Z,a-z)到初始字符里(chars)。 g增加图形字符到初始字符里(chars)。 k不移除初始字符(chars)而是返回这些字符。 l增加小写字母(a-z)。 n增加数字、下划线和字母(A-Z,a-z)。 p增加标点符号。 s增加空格,包括空格,水平制表符,垂直制表符,回车符,换行符和换页符 u增加大写字母(A-Z)。 a增加(A-Z,a-z)到初始字符里(chars)。 14. ANYALNUM(s,start):查找字符串s中从start位置开始第一个数字或字母的位置。 15. ANYALPHA(s,start):查找字符串s中从start位置开始第一个字母的位置。 16. ANYDIGIT(s,start):查找字符串s中从start位置开始第一个数字的位置。 17. ANYPUNCT(s,start):查找字符串s中从start位置开始第一个特殊标点字符的位置。 18. ANYSPACE(s,start):查找字符串s中从start位置开始第一个空格的位置。 19. ANYUPPER(s,start):查找字符串s中从start位置开始第一个大写字母的位置。 20. NOTALNUM(s,start):查找字符串s中从start位置开始第一个非数字和字母的位置。 21. NOTALPHA(s,start):查找字符串s中从start位置开始第一个非字母的位置。 22. NOTUPPER(s,start):查找字符串s中从start位置开始第一个非大写字母的位置。 23. FIND(s,c,m,start):查找字符串s中从start开始字符串c第一次出现的位置,m为i时忽略大小写。 24. FINDC(s,c,m,start):查找字符串s中从start开始字符串c中任何一个字符第一次出现得的位置,m为对d的添加项如下: i忽略大小写 t忽略字符串两边首尾的空格 k查找除c中的任何字符 a增加大写和小写字母(a-z)(A-Z) d增加数字 25. FINDW(s,w,m,start):查找字符串s中以w为分隔符(默认为空格)从start位置开始第一个出现字符串整体w的位置。 26. INDEXC(s,s1,s2,sn):查找多个字符串s1,s2,s3在s中出现的位置。找不到时返回0。 27. VERIFY(s,s1):查找字符串s中第一个非字符串s1中任何字符的位置,找不到时返回0。 28. CALL CATS(s,s1,s2,sn):把字符串S1-Sn去除首尾空格连接后赋值给变量s。 29. CALL CATX(d,s,s1,s2,sn):把字符串S1-Sn去除首尾空格通过d连接后赋值给变量s 30. LEFT(s):去除字符串s的左边空格。

sas正则式prxmatch

正则式:prxparse.Prxmatch optionscompress=yes; data dd; input string$40.; datalines; 我始终都抢不到2017年1月25号的票啊 今天是2017年1月23号 现在时间是9点17分 其实我很想我的妈咪 ; run; data ss; set dd; if _n_=1then ret=prxparse("/\我/"); retain ret; position=prxmatch(ret,string); run; 结果图如下: Prxparse这个函数不能单独使用,都是和其他正则函数一起结合使用的,这个结果就不用看ret了,运行是pdv层面的事,我就不多说,这里要关注的prxmatch函数返回的关键字的位置。 prxmatch(ret,string) ret填入的是prxparse返回的一个逻辑数,即0和1,以上面的例子为例,假设prxparse 在变量string中没有找到“我”这个词,那么返回的0,反之返回1.你问我为什么上面的结果ret中的值是1,那是因为ret记录的只是第一条观测的ret的值,这个变量你就直接不看就行了。但是你要记住prxmatch是怎么跑的。即ret在要那条观测判断为1时,prxmatch就执行,在string中“我”的位置并返回。这里中文占两个字符哈。 这是一个简单的例子,现在具体介绍下常用的一个关键字的表述。 例如: 1、Prxparse(”/\d\d\d/”)寻找任意的三个数字,这里要注意的是关键字必须用{“//”}圈起来。 2、Prxparse(”/\d+/”)寻找一个以上的数字,可以是1个也可以是100个 3、Prxparse(”/\w\w\w* /”)寻找两个以及两个以上的字符然后以空格分隔,*号后面有个 空格,你再多看几眼。譬如你要寻找屁屁后者屁屁屁你就可以这么写Prxparse(”/\屁\屁\屁* /”) 4、Prxparse(”/\w\w? + /”)寻找一个或者两个字符以一个空格或者多个空格分隔。看清楚 哈,?后面是有空格的哈。这个总结一下,就是字符多的用*号,空格和数字多个用+号。 5、Prxparse(”/(\w\w) +(\d) +/”)寻找一个两个字符之间与一个数字相隔一个或者多个 空格的字符。注意,在正则式中,空格也算的,所以写的时候要小心。那这里举个栗子,就是譬如“我是屁屁 2 ”那么就会找到:“屁屁2 ”。现在列出经常用到的关键字返

相关文档