SAS学习1(总体介绍以及一些程序例子)
Posted Zephyr丶J
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAS学习1(总体介绍以及一些程序例子)相关的知识,希望对你有一定的参考价值。
课程链接:https://www.bilibili.com/video/BV1PW411b7Wy?p=2&spm_id_from=pageDriver&vd_source=20efa9ffe24cc1c22dc5c11650c4c22d
课程重点是3、4、5层
逻辑库相当于数据库
有一个特别的逻辑库work,内置的,被称为临时逻辑库,如果我们创建了一个数据集,但是没有指定位置,就会默认放在临时逻辑库里;重启SAS的时候,临时逻辑库中的东西就会被删掉
特别注意:逻辑库名和物理地址的对应,是在当前会话下有效,如果退出软件,逻辑库名就会被丢掉,但是里面的数据表没有丢掉,重新打开的时候,可能创建的逻辑库名就没有了,需要重新建立链接(如果保存了工作空间的话是没有这个问题的)
例如下面创建的mydb,重新启动sas的时候可能就不存在了,但是实际物理地址还是存在的,只不过需要重新用libname链接
同样,删除逻辑库的时候,也只是删除逻辑库名
按照上面的步骤创建逻辑库(SAS语句结束必须加封号)
连接oracle数据库
图形界面创建逻辑库
data表示数据步的开始,mydb逻辑库名,student数据集
id name age等是变量,也就是属性;$符号表示这个变量是字符串类型的,宽度没写默认是8
这里有四个变量,即4个列
proc表示过程步
print是输出过程,data指定数据集,keep指定输出的列
obs是观测的意思,相当于行
这个输出还有时间,相当于报表,日志窗口可以看到相关信息
data表示数据步的开始,cr是数据集,放在临时逻辑库中
sas里面的变量就是数据集里面的列
这里18后面有个小数点,表示小数点后有几位;因为这里是字符串,所以小数点后面没有数字
id是变量,$表示是字符串变量,因为id的长度有18位,就需要写length这一句话,如果不写这一句话,则只能读8位
input语句是指定读入数据的时候列是怎么切割的,这里是先读入id,再读入sex这一列,如果没有特别指定,分隔符就是空格,$表示sex是字符串变量
读取过程是一次读一行,不断循环,直到run
在cards和run之间定义了内置的数据,这些数据插入在程序中。这里是将这些数据input到sfz这个表里面
proc过程步,print打印数据集,没有指定就是打印当前数据集
按照上面程序运行结果如下:
但是如果改了程序,没有加length,就会是下面的结果,
需要注意的是,这里用的是新的数据集,sfzz,如果仍然是用sfz,不管怎么运行,sfz都是原来的数据,不会变化;这里暂时还不懂sas的逻辑,感觉有点奇怪
这里又多尝试了几次,首先需要注意的是,如果打开了sfz,那么再提交,就会出现如下错误;
数据步出错了,说明改不了sfz的数据;但是过程步提交成功了,因此在输出结果的页面能看到表,而看到的表是上一次访问的表sfzz
如果关闭了sfz数据集,然后选定程序提交,那么就会得到想要的结果
有点麻烦。。
cdate表示变量名,等于引号里的东西,后面的d表示日期形的变量
ctime,加上了t表示时间形的变量;
cdatetime,后面加dt表示datetime类型的变量
format语句用来格式化输出,10表示输出的长度,格式是yymmdd
读取文本文件中的数据
首先指定逻辑库temp,这个文件中数据h和w用空格分开,每一行回车结束
%let是定义宏变量,指向文本文件所在的位置
filename,用fil这个名字来代替f1这个文件,相当于给了个名字;&f1是用了宏替换的方法;这里可以将这两句话直接写成 filename fil “c:\\temp\\abc.txt”
data 在temp逻辑库下面建立一个数据集hw
infile 读取文件中的数据
input 读入两个列,h、w,缺省的话说明是数值形数据
下面这个文件中的数据之间是没有空格的,所以需要程序去将数据分割开
input这里,@表示从第一个位置开始读,x1变量,3个字符长度;@4,从第四个位置读,数值型,6位;…
这种读文本文件的方法叫做列指针控制,@加数字,表示列指针;sas中还有行指针
$1-3表示第一列到第三列,这种方法叫做列控制符号
这里的文件和前面两个不一样的地方在于,数据不是连续的,而是用逗号分割的,
所以这里需要指定dlm
(这里f2应该写错了,应该是f3)
用set指定要读取的数据集,是mydb.student这个数据集,file指定要写的文件
以上是关于SAS学习1(总体介绍以及一些程序例子)的主要内容,如果未能解决你的问题,请参考以下文章