【知识】SAS数据分析完整笔记(3)

SAS学习笔记(3):SAS一般高级语言

本篇SAS读书笔记主要介绍SAS一般高级语言,主要内容包括赋值语句、输出语句、分支机构、循环结构、数组以及函数等六个部分。

1 赋值语句

在SAS中用赋值语句计算一个值并存放到变量中。

格式为 变量名=表达式:

例如

2 输出语句

SAS数据步的输出一般是数据集,用赋值语句计算的结果会自动写入数据集。SAS也提供了一个PUT语句,可以象其它语言程序的PRINT,WRITE,printf等语句一样立即显示输出结果。PUT语句在关键字后面列出要输出的各项,每一项可以是变量名或字符串,不能为数值常量或表达式,各项之间用空格分开。PUT语句的输出结果显示在LOG窗口。例如:

data ;
x=1; y=sin(x);
put 'sin function valueof' x ' is ' y;
run;

结果sin functionvalue of 1 is 0.8414709848

PUT语句的输出项还可以指定具体列位置

put x 10-20 .6; X数值显示在第10-20列,保留6位小数

put x 20.6 y 20.8; X显示在1-20列,6位小数。Y显示在21-40列,8位小数

如果希望PUT语句的输出不产生换行,使下一个PUT的结果可以显示在同一行,只要在PUT语句结尾处加一个@符,

如 put x @;

PUT语句的输出结果缺省情况下被送到运行记录窗口。在PUT语句之前用FILE语句可以改变PUT语句的输出目的地。比如,在PUT语句之前用file print;

可以把PUT语句的输出转向到输出窗口。

在FILE语句中指定一个包含文件名的字符串可以把PUT语句的输出转向到此文件中。比如file 'temp.out';把后续的PUT语句输出转向到当前工作目录下的文件"tmp.out"中,生成输出文件tmp.out。

3 分支结构

格式一: IF 条件 THEN 语句;

Else 语句;

有时我们在条件成立时需要进行的操作无法用一个语句完成,这时可以使用SAS提供的复合语句功能:只要把若干个语句用"DO;"语句和"END;"语句包围起来,就可以把它们看作是一个语句,就可以用在需要指定一个语句的地方。

if x>0 then do;

put 'x是正数';

x=2*x;

put x=;

end;

格式二:

SAS的IF结构允许嵌套,但SAS不提供IF-ELSEIF-ELSE的多分支结构。SAS的SELECT结构提供了更为灵活的多分支结构,可以实现比其它语言的IF -ELSEIF -ELSE结构更强的功能。SELECT结构有两种基本用法,第一种为:

SELECT(选择表达式);

WHEN(值列表)语句;

WHEN(值列表)语句;

OTHERWISE 语句:

END;

另一种形式:

SELECT;

WHEN(条件)语句;

WHEN(条件)语句;

OTHERWISE语句:

END;

4 循环结构

1. 计数DO循环

DO 计数变量=起始值TO结束值BY步长:

循环体语句……:

END;

在循环体中可以用LEAVE语句跳出循环,相当于C语言的break语句。

在循环体内用CONTINUE语句可以立即结束本轮循环并转入下一轮循环的判断与执行。

(2)当型循环

DO WHILE 循环继续条件:

循环体语句……:

END;

(3)直到型

DOUNTIL 循环退出条件:

循环体语句……:

END;

事实上,SAS的循环语句比上面所述还要灵活得多它在DO语句中可以指定一个循环列表,比如

循环变量i取5,7,1 1,14循环体被执行,当i取17时i的平方为289故循环体不被执行,循环结束。注意WHILE条件只作用于用逗号隔开的最后一项。

5 数组

SAS可以把一组同为数值型或同为字符型的变量合在一起,使用同一个名字称呼,用下标来区分。这与通常的程序设计语言中的数组略有区别,通常的程序设计语言中数组元素没有对应的变量名,而SAS数组每个元素都有自己的变量名。

一、数值型数组

定义:

ARRAY 数组名(维数说明)数组元素名列表(初始值表);

例如:array tests(3) math chinese english(0, 0, 0);

初始值表可以省略,这时其初始值为相应数组元素的值(如果其数组元素还没有值则初值为缺失值)

数组元素名列表可以省略,array tests(3)

也可以在说明维数时用"下标下界:下标上界"来说明一个其它的下标下界,如 ARRAY sales (95:97) yr95-yr97;这时sales(95)为yr95,sales(96)为yr96,sales(97)为yr97。

一维数组的维数说明还可以是一个星号,比如:

array tests(*) math chinese english (0, 0, 0);

二维数组定义,只要在维数说明中指定用逗号分开的两个下标界说明,例如:array table(2,2) x11 x12 x21 x22;注意,二维数组元素按行排列。

二、字符数组

定义:ARRAY 数组名(维数说明)$ 元素长度说明 数组元素名列表(初始值表);

三、临时数组

SAS也提供了与其它程序设计语言相同的数组,即数组元素只由数组名和序号决定,没有对应的变量名。这种数组叫做临时数组。

ARRAY数组名(维数说明)_TEMPORARY_ (初始值表)

6 函数

表示形式:

SUM(xl,x2,x3) SUM(OF xl x2 x3)或SUM(OF xl-x3)

1 数学函数

·ABS(x)求x的绝对值。

·MAX(xl,x2,…,xn)求所有自变量中的最大一个。

·MIN(xl,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。

·CEEL(x)求大于等于x的最小整数。当x为整数时就是x本身,否则为x右边最近的整数。

·FLOOR(x)求小于等于x的最大整数。当x为整数时就是x本身,否则为x左边最近的整数。

·INT(x)求x扔掉小数部分后的结果。

·FUZZ(x)当x与其四舍五入整数值相差小于IE-12时取四舍五入。

·LOG(x)求x的自然对数。

·LOG10(x)求x的常用对数。

·EXP(x) 指数函数

·SIN(x),COS(x),TAN(x)求x的正弦、余弦、正切函数。

·ARSIN(y),ARCOS(y),ATAN(y)

·SINH(x),COSH(x),TANH(x)双曲正弦、余弦、正切。

此外还有符号函数SIGN,一阶导数函数DIGAMMA,二阶导数函数TRIGAMMA。

2 数组函数

·DIM(x) 求数组x第一维的元素的个数(注意当下界为1时元素个数与上界相同,否则元素个数不一定与上界相同)

·DIMk(x) 求数组x第k维的元素的个数。如DIM2(x)计算二维数组x第二维长度。

·LBOUND(x)求数组x第一维的下界。

·HBOUND(x)求数组x第一维的上界。

·LBOUNDk(x)求数组x第k维的下界。

·HBOUNDk(x)求数组x第k维的上界。

3 字符函数

·TRIM(s)返回去掉字符串s的尾随空格的结果。

· UPCASE(s)把字符串s中小写字母转换为大写字母后的结果。

·LOWCASE(s)把字符串s中大写字母转换为小写字母后的结果。

·INDEX(s,sl)查找sl在s中出现的位置。找不到时返回0。

·RANK(s) 字符s的ASCII码值。

·BYTE(n)第n个ASCII码值的对应字符。

·REPEAT(s,n)字符表达式s重复n次。

·SUBSTR(s,p,n)从字符串s中的第p个字符开始抽取n个字符长的子串

·TRANWRD(s,sl,s2)从字符串s中把所有字符串sl替换成字符串s2后的结果。

4 日期和时间函数

·MDY(m,d,yr)生成yr年m月d日的SAS日期值

·YEAR(date)由SAS日期值date得到年

·MONTH(date)由SAS日期值date得到月

·DAY(date)由SAS日期值date得到日

·WEEKDAY(date)由SAS日期值date得到星期几

·QTR(date)由SAS日期值date得到季度值

·DHMS(d,h,m,s) 由SAS日期值d、小时h、分钟m、秒s生成SAS日期时间值

5 分布密度函数、分布函数

·分布函数值=CDF('分布',x<,参数表>);

·密度值= PDF('分布',x<,参数表>);

·概率值= PMF('分布',x<,参数表>);

·对数密度值= LOGPDF('分布',x<,参数表>);

·对数概率值= LOGPMF('分布',x<,参数表>);

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2014-07-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

3149 爱改名的小融 2

3149 爱改名的小融 2 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description W...

3505
来自专栏计算机视觉与深度学习基础

Leetcode 164 Maximum Gap 桶排序好题

Given an unsorted array, find the maximum difference between the successive ele...

2065
来自专栏null的专栏

C/C++——柔性数组

1、问题来源 在博文数据结构和算法——kd树中,在构建kd树的过程中,有如下的一段代码: #define MAX_LEN 1024 typedef struc...

2964
来自专栏游戏开发那些事

三十分钟掌握STL

这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟...

1044
来自专栏和蔼的张星的图像处理专栏

133. 最长单词 一次遍历+vector容器

如果只是要最长的一个单词,那么只需要一次遍历即可,这里是要求求出最长单词的集合,稍作改变即可。

732
来自专栏SeanCheney的专栏

《Pandas Cookbook》第06章 索引对齐1. 检查索引2. 求笛卡尔积3. 索引爆炸4. 用不等索引填充数值5. 从不同的DataFrame追加列6. 高亮每列的最大值7. 用链式方法重现

第01章 Pandas基础 第02章 DataFrame运算 第03章 数据分析入门 第04章 选取数据子集 第05章 布尔索引 第06章 索引对齐 ...

801
来自专栏QQ音乐技术团队的专栏

Android Native 开发之 NewString 与 NewStringUtf 解析

本文将从一个 Native Crash 分析入手,带大家了解我们平时开发中,那些容易忽略但又很值得学习的底层源码知识。

1.2K9
来自专栏猿人谷

三十分钟掌握STL

这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟...

2498
来自专栏潇涧技术专栏

Python Data Structures - C1 Search

参考内容: 1.Problem Solving with Python Chapter5: Search and Sorting online_link ...

581
来自专栏我是业余自学C/C++的

线性表——链式描述(双向链表)

1273

扫码关注云+社区