前言
在SAS中国也已经待了有一段时间,经过这么久的熏陶我对SAS语言还不是很熟悉,平时的时间也没有太过深入的去进行学习SAS语言,前几天去中国银行客户现场,也总算接触到了一点SAS语言的皮毛,今天就算是一个引子吧,准备在博客开一个学习SAS语言的专栏,一是来记忆一下学到的知识点,俗话说好记性不如烂笔头,二是积累一下自己的技能,为后面的工作做铺垫,人生总是走在学习的路上。
SAS数据集、变量、常量、观测
- 数据集:SAS可以管理的结构化数据,简单来说就是SAS软件认识的数据表,可以过程步用来数据处理,数据建模,如果说你的数据是外部文件保存,需要用SAS语言进行处理之后变成SAS数据集
- 数据集的名称不超过32个字符
- 变量:简单来说就是表头,数据表每一个数据项的名称就是一个变量
- 类型:数值型和字符型(变量名后带$)
- 特性:名称、类型、长度、输入格式、输出格式、标记
- 最多有32个字符组成,由字母、数字、下划线组成
- 长度默认为8
- 常量:固定不变,跟其他编程语言类似
- 观测:简单来说就是表的一行数据,在SAS里称之为观测
SAS导入数据的几个方法
- 图形化界面导入(在数据不大的时候可以去用图形化界面进行导入,这里不过多赘述)
- SAS代码导入
本次工作的目标
本次的工作目标是用SAS脚本把客户的外部数据导入到SAS软件中
SAS代码导入实例
- 导入内部数据,也就是sas代码中定义的数据,使用
datalines
关键字
data test;
input name $ sex $ age;
datalines;
tom 男 23
jim 女 24;
run;
- 导入txt文件数据
tom 男 23
jim 女 24
假设txt文件内容如上图所示,分隔符为空格
代码语言:javascript复制data test;
infile "/home/sas/test.txt";
input name $ sex $ age;
run;
tom/男/23
jim/女/24;
假设txt文件内容如上图所示,分隔符为/
代码语言:javascript复制data test;
infile "/home/sas/test.txt" dlm='/';
input name $ sex $ age;
run;
dlm
这个参数可以指定分隔符,但前提是分隔符只有一个字符,如果分隔符是多个字符的话,则需要用 dlmstr
参数指定
姓名 性别 年龄
tom 男 23
jim 女 24
假设txt文件内容如上图所示,第一行有表的变量名称,我不想读进去,这时候用 firstobs
这个参数,指定SAS从哪一行开始读,同时 obs
这个参数还可以控制读到多少行
data test;
infile "/home/sas/test.txt" firstobs=1;
input name $ sex $ age;
run;
姓名 性别 年龄
tommmmmmmmmmmmmmmmmmmmmm 男 23
jimmmmmmmmmmmmmmmmmmmmmm 女 24
假设txt文件内容如上图所示,姓名已经超过了默认的8个长度,为了完整的导入数据,这时我们可以用 length
这个关键字,去进行定义这个变量的长度,或者在input语句中使用 :
去定义长度,所以代码可以是这样
data test;
infile "/home/sas/test.txt" firstobs=1;
length name $20.;
input name $ sex $ age;
run;
或者是这样
代码语言:javascript复制data test;
infile "/home/sas/test.txt" firstobs=1;
input name:$20. sex $ age;
run;
在最后介绍一下另外的两个关键字 missover
、 dsd
missover
的作用是,如果txt文件一行数据不够时,告诉sas不要跳到下一行进行读取,简单来说就是保证读取数据不会串行
dsd
的作用是,忽略用引号括起来数据中的分隔符,假设数据是用 ,
进行分割,数据项是 china,beijing
,为保证该行数据能完整被读入,需要使用 dsd
SAS执行Linux命令,并返回命令执行的结果
sas比较强大的地方就是可以无缝与shell进行集成衔接,这样你就可以使用shell获取到的结果进行数据处理与分析,可用到的场景非常之多,举一个例子,在sas进行io测试的时候,我们可以图形化界面显示出io测试的结果和数据,后期尝试写一个脚本出来,可以提高以后的工作效率。
示例代码如下:
代码语言:javascript复制filename cmd pipe "ls /home/sas";
data _null_;
infile cmd;
input result:$200.;
run;
未完待续
本次只是提到了txt文件,后续还有csv、excel文件,下次更新~~~