SAS学习--导入导出文件、拼表、数据集筛选

Tyrant 2019年12月07日 •  sas 88 •  0

前言

目前项目进行到中期,最近又学习了一些新的知识,例如sas拼表、导出文件、数据集筛选等,好记性不如烂笔头,记录下来有待后期回头查看,人生总是走在学习的道路上。

SAS 导出文件

SAS将数据集导出为文件有两种方法,一种使用PROC EXPORT,另外一种是使用DATA

  • proc export
PROC EXPORT DATA=DATA_SET OUTFILE="/sas/data_set.txt" DBMS=TAB REPLACE;
DELIMITER="|";
PUTNAMES=NO;
RUN;
/*
    DATA:指定要导出的数据集
    OUTFILE:指定要导出的文件
    DBMS:指定导出文件类型,文本文件为TAB CSV文件为CSV
    REPLACE:文件覆盖选项
    DELIMITER:指定文件的分隔符
    PUTNAMES:指定是否输出表头
*/
  • data
FILENAME DATA_SET "/sas/data_set.txt";
DATA _NULL_;
SET DATA_SET;
FILE DATA_SET LRECL=32767 DLM="|" ENCODING="UTF-8" TERMSTR=CRLF;
PUT
NAME AGE CLASS_NAME;
RUN;
/*
    LRECL:指定读入记录的长度,默认是256
    DLM:指定分割符
    ENCODING:指定文件编码
    TERMSTR:指定记录分隔符
*/

SAS 数据集筛选

  • WHERE子句进行筛选

SAS 数据集筛选可以在DATA步中进行操作,使用WHERE关键字对指定的列的值进行条件筛选,例子如下:

DATA STUDENT;
SET STUDENT;
WHERE AGE <= 10;
RUN;
  • KEEP关键字

KEEP关键字可以使数据集保留下你想要的字段,比如一个表里边有五个字段,你只想保留三个字段,则使用KEEP关键字进行过滤

DATA STUDENT;
    SET STUDENT;
    KEEP 字段1 字段2 字段3;
RUN;
  • DROP关键字

DROP关键字可以丢掉你不想要的字段

DATA STUDENT;
    SET STUDENT;
    DROP 字段1 字段2 字段3;
RUN;
  • 另外的写法
DATA STUDENT;
    SET STUDENT(KEEP=);
RUN;

DATA STUDENT;
    SET SUTDENT(DROP=);
RUN;

DATA STUDENT;
    SET STUDENT(WHERE=);
RUN;

SAS 循环语句格式

DATA _NULL_;
    IF CONDITION THEN ACTION;
RUN;

DATA _NULL_;
    IF CONDITION THEN DO;
        ACTION;
        ACTION;
        ACTION;
    END;
RUN;

DATA _NULL_;
    IF CONDITION THEN ACTION;
        ELSE IF CONDITION THEN ACTION;
        ELSE IF CONDITION THEN ACTION;
        ELSE IF CONDITION THEN ACTION;
    ELSE CONDITION THEN ACTION;
RUN;

SAS 拼表

SAS 拼表过程十分简单,拼表意思就是表A和表B有共同的列,将表根据相同的列拼在一起,跟SQL中的left join和right join还有inner join是一个道理,在拼表之前需要将数据集根据公共的字段排序,需要用到PROC SORT,下面介绍一下PROC SORT

  • PROC SORT
PROC SORT DATA=STUDENT NODUPKEY DUPOUT=;
BY 字段名1 字段名2 字段名3;
/*PROC SORT 默认会根据第一个字段排序,然后第二个,第三个*/
RUN;

/*
    NODUPKEY:关键字可以实现去重功能
    DUPOUT=数据集名称:可以实现将重复的数据放在指定的数据集中
    BY DESCENDING:默认以升序排序,用了DESCENDING关键字则以降序排序
*/
  • MERGE
/*left join*/
DATA STUDENT;
    MERGE A(IN=A) B(IN=B);
    BY NAME;
    IF A;
RUN;
/*right join*/
DATA STUDENT;
    MERGE A(IN=A) B(IN=B);
    BY NAME;
    IF B;
RUN;
/*inner join*/
DATA STUDENT;
    MERGE A(IN=A) B(IN=B);
    BY NAME;
    IF A AND B;
RUN;

/*
    MERGE:表A(IN=A) 表B(IN=B)
    BY 后面跟两个表共有的主键
    IF 后面跟表关联关系
*/
Tags:SAS
上一篇
打赏
没有啦~

添加新评论