SAS语言入门教程

1.什么是SAS

    SAS语言是一种专用的数据管理与分析语言,它提供了一种完善的编程语言。
类似于计算机的高级语言,SAS用户只需要熟悉其命令、语句及简单的语法规则就可以做数据管
理和分析处理工作。因此,掌握SAS编程技术是学习SAS的关键环节。
    在SAS中,把大部分常用的复杂数据计算的算法作为标准过程调用,用户仅需要指出过程名
及其必要的参数。这一特点使得SAS编程十分简单。
中文名 统计分析系统 外文名 SAS 全称 Statistics Analysis System

2.语言简介

1.SAS语句:
    1.SAS语言程序由数据步和过程步组成。
        1.数据步用来生成数据集、计算、整理数据,
        2.过程步用来对数据进行分析、报告。
    2.SAS语言的基本单位是语句,
        1.每个SAS语句一般由一个关键字(如DATA,PROC,INPUT,CARDS,BY)开头,
          包含SAS名字、特殊字符、运算符等,以分号结束。
        2.SAS关键字是用于SAS语句开头的特殊单词,SAS语句除了赋值、累加、注释、空语
          句以外都以关键字开头。
        3.SAS名字在SAS程序中标识各种SAS成分,如变量、数据集、数据库,等等。
        4.SAS 名字由1到8个字母、数字、下划线组成,第一个字符必须是字母或下划线。
        5.SAS关键字和SAS 名字都不分大小写。

2.SAS表达式
	1.SAS数据步程序中的计算用表达式完成。
  	  表达式把常量、变量、函数调用运算符、括号连接起来得到一个计算结果。
	    1.常 量
	      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中用一个单独的小数点来表示缺失值常量。
	    2.变 量
	        1.SAS变量的基本类型有两种:数值型和字符型。
	        2.日期、时间等变量存为数值型(实际记录为距1960/01/01的天数)。
	        3.SAS的数值型变量可以存储任意整数、定点实数、浮点实数,一般不关心其区别。
	          数值型变量在数据集中的存贮一般使用8个字节。SAS的字符型变量缺省的长度
	          是8个字符,但是如果在INPUT 语句中输入字符型变量时指定了长度则不受此
	          限制。可以用LENGTH语句直接指定变量长度。
	            LENGTH 语句一般应出现在变量定义之前,格式为:
	            LENGTH 变量名 $ 长度;例如:
	            LENGTH name $ 20;
	    3.运算符
	        SAS运算符包括算术、比较、逻辑及其它的运算符。
	        1.算术运算符
	            算术运算符: + - * / **,运算优先级按通常的优先规则。
	        2.比较运算符:
	             比较运算符用于比较常量、变量的值大小、相等,包括
	                = ^= > < >= <=
	                EQ NE GT LT GE LE IN
	                其中EQ等名字和=等特殊字符是同一运算符的等价写法。比较运算符得
	                到“真”或“假” 的结果,主要用于需要条件的分支、循环等语句中。
	                运算符IN是一个SAS特有的比较运算符,用来检查某个变量的取值是否
	                在一个给定列表中,例如:
	                	  prov in ('Beijing', 'Tianjin', 'Shanghai', Chongqing')
	                   可以判断变量prov的取值是否为四个直辖市之一。
	        3.逻辑运算符
	            逻辑运算符用来连接比较得到的结果以构成复杂的条件,有三种逻辑运算
	            符: &(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之间
	                复杂的逻辑表达式最好用括号表示其运算优先级,以免误记优先规则并
	                可利于阅读程序。
	        4.其它的运算符
	            其它的运算符:
	            ||(两个连续的|号),两个字符串连接
	            <> 取两个运算值中较大一个的(比如3<>5结果为5)
	            >< 取两个运算值中较小一个的 (比如3><5结果为3)
	            注意:<>符在有些语言中用作“不等于”比较算符,而SAS 中用法则较特殊。

3.SAS程序规则

1.SAS程序由语句构成。每个语句以分号结尾。
2.在SAS程序中,一个语句可以写到多行(不需任何续行标志),也可以在一行连续写几个语句。
3.SAS语言中只要允许用一个空格的地方就可以加入任意多个空白(空格、制表符、回车),允
  许用空格的地方是名字周围、运算符周围。
4.SAS关键字和名字大小写不分,但字符型数据值要区分大小写,比如"Beijing" 和"BEIJING"
  被认为是不同的数据值。
5.在SAS程序中可以加入注释,注释的内容用/*和*/在两端界定。这种注释可以出现在任何允许
  加入空格的位置,可以占多行。
6.SAS中一般只把注释单独占一行或若干行,不把注释与程序代码放在同一行。注释的另一个作
  用是把某些代码暂时屏蔽使其不能运行。
7.SAS程序包括数据步和过程步两种结构,每一个步是一段相对完整的可以单独运行的程序。
  数据步用来生成、整理数据和自编程计算,过程步调用SAS已编好的处理过程对数据进行处理。
  自己用SAS编程序进行计算主要在数据步中进行。
8.SAS数据步以DATA语句开头,以RUN语句结尾。DATA步中可以使用INPUT、CARDS、INFILE 、
  SET、MERGE等语句指定数据来源输入数据,也可以用赋值、分支、循环等编程结构直接生成
  数据或对输入的数据进行修改。
9.作用编辑
    SAS是一种专用的数据处理、统计计算语言,但是它也包含一般的高级语言编程能力并扩充
    了许多数学、统计等方面的函数。
    SAS语言的编程计算能力主要由SAS数据步提供。DATA语句以关键字DATA 开头,后面给出
    一个数据集名,例如:
    	data out1;
    则在本数据步要生成的数据集,其名字为out1。我们也可以省略数据集名,这时SAS自动生
    成一个临时数据集名。也可以使用特殊名字_NULL_ ,表示本数据步不生成数据集。

4.一赋值语句

在SAS中用赋值语句计算一个值并存放到变量中。
格式为:变量名 = 表达式;
例如:
    avg = (math + chinese)/2;
    isfem = (sex='女');
    y=sin(x)**2;
    newv = .;
    其中第一个赋值语句用一个公式计算平均分数。第二个生成一个取值为0或1的变量,
    性别为女时为1,否则为0。第三个使用了正弦函数和乘方运算。第四个给变量赋了缺失值。

5.二输出语句

1.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
2.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列。
         输出占位不满指定宽度时,数值型数据向右对齐,字符型数据向左对齐。
    3.如果希望PUT语句的输出不产生换行,使下一个PUT的结果可以显示在同一行,只要在
      PUT 语句结尾处加一个@符。
      PUT语句的输出结果缺省情况下被送到运行记录窗口。若在PUT语句之前用FILE语句可以
      改变PUT语句的输出目的地。如,在PUT语句之前用file print;可以把PUT语句的输出
      转向到输出窗口。在FILE语句中指定一个包含文件名的字符串可以把PUT语句的输出转向
      到此文件中。比如file 'tmp.out';输出文件把后续的PUT语句输出转向
      到当前工作目录下的文件“tmp.out”中,生成tmp.out 。注意当前工作目录在SAS状态
      栏的右方显示,双击可以更改。文件名也可以指定全路径,比如“C:\SAS\TMP.OUT”。

6.三分支结构

⒈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提供的复合语句功能。例:

ut 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;

猜你喜欢

转载自blog.csdn.net/zhangshuaijun123/article/details/84891497