第一节 SAS的数据读入思路及代码

目录

1.1 思路

不管对数据是否熟悉,是否有数据字典,下图的读数思路都可以通用。
第一节 SAS的数据读入思路及代码

1.2 代码

*1.设置读入的记录数:全局变量,可设置为指定数字,全量读入设为max;
option obs=1000;    /* max */


*2.import语句读入;
proc import 
datafile = 'C:\Users\najin\Desktop\test.csv'  /* 读入文件路径。文件格式txt、csv皆可 */
out = data-set                                /* 读入数据集名称:逻辑库名.数据集名 */
dbms = dlm replace;                             
delimiter = ',';                              /* 分隔符:csv默认为(,) */
datarow = 2;                                  /* 从第几行开始读入:有标题设为2,无标题设为1 */
getnames = yes;                               /* 是否获取原始数据标题 */
run;


*3.截取日志中语句再次读入;
*用import语句读入时,很可能存在字段格式不正确,长度被截断等问题,因此需要修改字段格式及长度后再次读入;
data data-set    ;
%let _EFIERR_ = 0;                             /*set the ERROR detection macro variable*/
infile 'C:\Users\najin\Documents\ZX_P_LOAN_INFO.txt' delimiter = ',' missover dsd lrecl=32767 firstobs=2 ;
    informat LOAN_ID             $36. ;        /* 字符格式 */
    informat REPORT_NO           best32. ;     /* 数值格式 */
    informat LOAN_START_DATE     yymmdd10. ;   /* 日期格式 */

    format LOAN_ID               $36. ;
    format REPORT_NO             best12. ;
    format LOAN_START_DATE       yymmdd10. ;

    input
        LOAN_ID                  $            /* 字符格式 */
        REPORT_NO                             /* 数值格式 或 日期格式 */
        LOAN_START_DATE
    ;
if _ERROR_ then call symputx('_EFIERR_',1);   /* set ERROR detection macro variable */
run;


*4.封装成宏;
*封装为名为read_cusTab1的宏,其中fp、ds、obs_count为宏参数,执行时只须给参数赋值,SAS会进行相应代码替换;
*加入了编码转换(encoding = utf8)、局部控制变量(options obs);
%macro read_cusTab1(fp, ds, obs_count);
    data &ds.;
    options obs=&obs_count.;
    %let _EFIERR_ = 0;           /* set the ERROR detection macro variable */
    infile &fp. delimiter = ',' MISSOVER DSD lrecl=32767 firstobs=2 encoding = utf8;
        informat LOAN_ID             $36. ;       /* 字符格式 */
        informat REPORT_NO           best32. ;    /* 数值格式 */
        informat LOAN_START_DATE     yymmdd10. ;  /* 日期格式 */

        format LOAN_ID               $36. ;
        format REPORT_NO             best12. ;
        format LOAN_START_DATE       yymmdd10. ;

        input
            LOAN_ID                  $            /* 字符格式 */
            REPORT_NO                             /* 数值格式 或 日期格式 */
            LOAN_START_DATE
            load_dat
        ;
    if _ERROR_ then call symputx('_EFIERR_',1);   /* set ERROR detection macro variable*/
    run;

%mend read_cusTab1;


*5.宏的调用;
*宏的调用分两种情况:本程序直接调用;在另一个程序中调用;

*5.1 本程序直接调用;
%read_cusTab1('D:\data\sas_file\zx\RAWDATA\GZNS_cxrz.csv', data-set, max);

*5.2 在另一个程序中调用;
*注意:该种方式调用,被引用的宏会被完整的执行;
%include '程序路径\程序名称';

*示例如下;
%include "/data/home/app/RDS/ZYH/ZX/PGM/SCNX_READ_DATA.SAS";  /* 路径+宏名称 */

%let ENV = %sysget(MACRO_CV_ENV);                             /* 创建宏变量的套了一个宏变量 */
%INCLUDE "&ENV";                                              /* 调用宏 */
上一篇:A001-1:如何使用 jupyter notebook 作为 SAS 的笔记本


下一篇:关于网络存储技术和存储的协议