SAS学习--导入数据、执行Linux命令

2022-03-23 14:49:01 浏览数 (1)

前言

在SAS中国也已经待了有一段时间,经过这么久的熏陶我对SAS语言还不是很熟悉,平时的时间也没有太过深入的去进行学习SAS语言,前几天去中国银行客户现场,也总算接触到了一点SAS语言的皮毛,今天就算是一个引子吧,准备在博客开一个学习SAS语言的专栏,一是来记忆一下学到的知识点,俗话说好记性不如烂笔头,二是积累一下自己的技能,为后面的工作做铺垫,人生总是走在学习的路上。

SAS数据集、变量、常量、观测

  • 数据集:SAS可以管理的结构化数据,简单来说就是SAS软件认识的数据表,可以过程步用来数据处理,数据建模,如果说你的数据是外部文件保存,需要用SAS语言进行处理之后变成SAS数据集
  • 数据集的名称不超过32个字符
  • 变量:简单来说就是表头,数据表每一个数据项的名称就是一个变量
  • 类型:数值型和字符型(变量名后带$)
  • 特性:名称、类型、长度、输入格式、输出格式、标记
  • 最多有32个字符组成,由字母、数字、下划线组成
  • 长度默认为8
  • 常量:固定不变,跟其他编程语言类似
  • 观测:简单来说就是表的一行数据,在SAS里称之为观测

SAS导入数据的几个方法

  • 图形化界面导入(在数据不大的时候可以去用图形化界面进行导入,这里不过多赘述)
  • SAS代码导入

本次工作的目标

本次的工作目标是用SAS脚本把客户的外部数据导入到SAS软件中

SAS代码导入实例

  1. 导入内部数据,也就是sas代码中定义的数据,使用 datalines关键字
代码语言:javascript复制
data test;
    input name $ sex $ age;
    datalines;
    tom    男 23
    jim    女 24;
run;
  1. 导入txt文件数据
代码语言:javascript复制
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参数指定

代码语言:javascript复制
姓名 性别 年龄
tom    男 23
jim    女 24

假设txt文件内容如上图所示,第一行有表的变量名称,我不想读进去,这时候用 firstobs这个参数,指定SAS从哪一行开始读,同时 obs这个参数还可以控制读到多少行

代码语言:javascript复制
data test;
    infile "/home/sas/test.txt" firstobs=1;
    input name $ sex $ age;
run;
姓名 性别 年龄
tommmmmmmmmmmmmmmmmmmmmm 男 23
jimmmmmmmmmmmmmmmmmmmmmm 女 24

假设txt文件内容如上图所示,姓名已经超过了默认的8个长度,为了完整的导入数据,这时我们可以用 length这个关键字,去进行定义这个变量的长度,或者在input语句中使用 :去定义长度,所以代码可以是这样

代码语言:javascript复制
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;

在最后介绍一下另外的两个关键字 missoverdsd

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文件,下次更新~~~

0 人点赞