SAS语言的语言简介

SAS语言的语言简介,第1张

SAS系统强大的数据管理能力、计算能力、分析能力依赖于作为其基础的SAS语言。SAS语言是一个专用的数据管理与分析语言,它的数据管理功能类似于数据库语言(如FoxPro),但又添加了一般高级程序设计语言的许多成分(如分支、循环、数组),以及专用于数据管理、统计计算的函数。SAS系统的数据管理、报表、图形、统计分析等功能都可以用SAS语言程序来调用,只要指定要完成的任务就可以由SAS系统按照预先设计好的程序去进行,所以SAS 语言和FoxPro等一样是一种第四代语言。这里简单介绍SAS语言的基本成分与规则毕丛。 SAS数据步程序中手枝樱的计算用表达式完成。表达式把常量、变量、函数调用用运算符、括号连接起来得到一个计算结果。

常 量

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

数值型:数值型常数可以用整数、定点实数、科学计数法实数表示。如:

12,-7.5,2.5E-10

字符型:字符型常数为两边用单撇号或两边用双撇号包围的若干字符。如:

'Beijing',Li Ming,李明

日期、时间:

日期型常数是在表示日期的字符串后加一个字母d大小写均可),中间没有空格。时间型常数是在表示时间的字符串后加一个字母t。日期时间型常数在表示日期时间的字符串后加字母dt。

日期型:'13JUL1998'd

时间型:'14:20't

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

因为SAS是一种数据处理语言,而实际数据中经常会遇到缺失值,比如没有观测到数值,被访问人不肯答,等等。SAS中用一个单独的小数点来表示缺失值常量。

变 量

SAS变量的基本类搭旅型有两种:数值型和字符型。日期、时间等变量存为数值型(实际记录为距1960/01/01的天数)。SAS的数值型变量可以存储任意整数、定点实数、浮点实数,一般不关心其区别。数值型变量在数据集中的存贮一般使用8个字节。SAS的字符型变量缺省的长度是8个字符,但是如果在INPUT 语句中输入字符型变量时指定了长度则不受此限制。可以用LENGTH语句直接指定变量长度。

LENGTH 语句一般应出现在变量定义之前,格式为:

LENGTH 变量名 $ 长度例如:

LENGTH name $ 20

运算符

SAS运算符包括算术、比较、逻辑及其它的运算符。

算术运算符

算术运算符: + - * / **,运算优先级按通常的优先规则。

比较运算符

比较运算符用于比较常量、变量的值大小、相等,包括

= ^= ><>= <=

EQ NE GT LT GE LE IN

其中EQ等名字和=等特殊字符是同一运算符的等价写法。比较运算符得到“真”或“假” 的结果,主要用于需要条件的分支、循环等语句中。

运算符IN是一个SAS特有的比较运算符,用来检查某个变量的取值是否在一个给定列表中,例如:

prov in ('Beijing', 'Tianjin', 'Shanghai', Chongqing')

可以判断变量prov的取值是否为四个直辖市之一。

逻辑运算符

逻辑运算符用来连接比较得到的结果以构成复杂的条件,有三种逻辑运算符: &(AND) |(OR) ^(NOT) 。其中AND是&(与)的等价写法,OR是|(或)的等价写法,NOT是^(非)的等价写法。

例如:

(salary >= 1000) AND (salary <2000)

表示工资收入在1000-2000之间(不含2000)

(age <= 3) OR (sex = '女')

表示三岁以下(含三岁)的婴儿及妇女

NOT ((salary >= 1000) AND (salary <2000))

表示工资收入不在1000-2000之间

复杂的逻辑表达式最好用括号表示其运算优先级,以免误记优先规则并可利于阅读程序。

其它的运算符

其它的运算符:

||(两个连续的|号),两个字符串连接

<>取两个运算值中较大一个的(比如3<>5结果为5)

><取两个运算值中较小一个的 (比如3><5结果为3)

注意:<>符在有些语言中用作“不等于”比较算符,而SAS 中用法则较特殊。 SAS程序由语句构成。每个语句以分号结尾。在SAS程序中,一个语句可以写到多行(不需任何续行标志),也可以在一行连续写几个语句。SAS语言中只要允许用一个空格的地方就可以加入任意多个空白(空格、制表符、回车),允许用空格的地方是名字周围、运算符周围。另外,SAS关键字和名字大小写不分,但字符型数据值要区分大小写,比如Beijing 和BEIJING被认为是不同的数据值。

在SAS程序中可以加入注释,注释的内容用/*和*/在两端界定。这种注释可以出现在任何允许加入空格的位置,可以占多行。SAS中一般只把注释单独占一行或若干行,不把注释与程序代码放在同一行。注释的另一个作用是把某些代码暂时屏蔽使其不能运行。

SAS程序包括数据步和过程步两种结构,每一个步是一段相对完整的可以单独运行的程序。数据步用来生成、整理数据和自编程计算,过程步调用SAS已编好的处理过程对数据进行处理。自己用SAS编程序进行计算主要在数据步中进行。

SAS数据步以DATA语句开头,以RUN语句结尾。DATA步中可以使用INPUT、CARDS、INFILE 、SET、MERGE等语句指定数据来源输入数据,也可以用赋值、分支、循环等编程结构直接生成数据或对输入的数据进行修改。

1、标准的C和C++都不慧此支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数库。

2、C/C++ 中使用正则表达式一般分为三步:

1)编译正则表达式 regcomp()

int regcomp (regex_t *compiled, const char *pattern, int cflags)

这个函数把指定的正则表达式pattern编译成一种特定的数据格式compiled,这样可以使匹配更有效。函数regexec 会使用这个数据在目标文本串中进行模式匹配。执行成功返回0。

2)匹配正则表达式 regexec()

int regexec (regex_t *compiled, char *string, size_t nmatch, regmatch_t matchptr [], int eflags)

当编译好正则表达式后,就可以用regexec 匹配我们的目标文本串了,如果在编译正则表达式的时候没有指定cflags的参数为REG_NEWLINE,则默认情况下是忽略换行符的,也就是把整个文本串当作一个字清扒符串处理。执行成功返回0。

3)释放正则表达式 regfree()

void regfree (regex_t *compiled)

当使用完编译好的正则表达式后,或者要重新编译其他正则表达式的时候,可以用这个函数清空compiled指向的regex_t结构前正迅体的内容。请注意,如果是重新编译的话,一定要先清空regex_t结构体。


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

原文地址: https://outofmemory.cn/yw/8281086.html

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

发表评论

登录后才能评论

评论列表(0条)

保存