SAS学习3(对数据的简单处理条件循环语句数组datasets过程)
Posted Zephyr丶J
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAS学习3(对数据的简单处理条件循环语句数组datasets过程)相关的知识,希望对你有一定的参考价值。
产生新变量
赋值语句
这里s的初值是0,然后循环处理,一直累加,相当于s=s+x
不要画蛇添足的写一个s=0,因为写上以后每次循环s的初值就是0,而不是累加了
这里每次循环z赋值为0,所以每次和x一样
s是上面讲过的累加
retain y 8 是给y赋初始值8,然后开始累加x,但是下次循环的时候,y的值不会重置,retain这条语句不会执行,所以就有y和s相差8的情况
retain语句可以代替求和语句,并且给数据赋初值
删除变量
drop把三个列删除掉,目标数据集中不会写入,但是中间运算过程中变量是可以使用的
drop以后,输出不显示,数据集中也不会写入
保留变量
保留指定变量,其他变量不写入
条件语句
mean计算平均值
每个观测值都会执行if语句,
put是输出语句,跟print的区别在于put是将输出值输出在日志窗口,而不是在输出窗口
在右边看到输出窗口都输出了,日志窗口只有if以后的
if 满足条件,then执行,否则else执行
忽略首行的变量描述 _N_
用if语句创建子数据集
删除行
由于这里if后面的语句不止一条,所以这里不能直接写
需要写do加上end,将这几句话框起来,相当于java中的
这里的of(查到的):
这些函数的调用方法类似其它语言,比如求x1,x2,x3三个自变量的和可以用函数SUM(x1,x2,x3) 。另外,SAS还提供了函数调用的另一种语法以便于把多个数据集变量作为函数自变量,其格式为“函数名(OF 变量名列表)”,其中变量名列表可以是任何合法的变量名列表,比如x1 ,x2,x3的和等价地可以用SUM(OF x1 x2 x3)或SUM(OF x1-x3)表示。注意两种写法不能混在一起,比如SUM(OF x1,x2,x3)和SUM(x1-x3)都是错的。
关键应该是把多个数据集变量作为函数自变量,变量名列表写的时候中间没有逗号
循环语句
goto不建议使用
这里两个@@符号可以看到也可以用在输出中,表示不换行
其实就是for循环
c是1到8,步长是2;后面13表示也可以取13,16,17,18也可以取到
put c= 可以看到输出的是C=数字,这种形式
这个数据步没有input,也没有datalines,所以循环结束就会终止
结束以后,会自动创建一个数据集,写入n=5,只有一个观测值
output
output会将每次循环的观测值写入数据集
但是可以看到和上一个程序的差别,这里n没有把5写入数据集中
只有在数据步中存在output,数据步就不会产生自动写入的操作,只有output的时候才回去执行写入的动作
也就是只有output会显示的写入,而不会隐式的自动写入
do until是条件成立的时候退出循环
但是这里可以看到,循环还是执行了一次,这就相当于until是写在循环体最后面的
在最后面判断循环是否进行
所以这里仍然会进行一次执行
数组
sas中的数组相当于变量的别名
可以通过下标来对数组中的变量进行控制
创建数组:
ARRAY test[8] 变量名
表示创建8个变量的数组,分别对应
取元素的时候可以用小括号或者大括号
例子
这里在创建数组的时候赋予了初始值
input中test[*]读入test数组
多维数组
数据集连接
在列的方向上进行合并
当各个表中变量结构完全相同的时候,直接连接
当结构不同的时候,会将没有的值赋空值
合并
就是行的方向上合并
一对一合并就是直接将观测值一行行合并,其实大部分情况下没什么意义
匹配合并
首先产生两个数据集
排序以后合并
先排序是为了合并更加效率
sas中没有索引的概念
输出语句
put
@y表示在y的位置上输出x,后面的@的表示不换行
输出一行以后,写一个put表示换行
file
给文件中写数据
file指定输出的文件
print是表示输出窗,这里也可以是log,表示日志窗
也可以是文件名,表示写到具体文件中
n=ps表示行号可以控制
output
目标数据集有两个
datasets过程
append
modify
配合后面的语句使用
format
informat
label
rename
以上是关于SAS学习3(对数据的简单处理条件循环语句数组datasets过程)的主要内容,如果未能解决你的问题,请参考以下文章