ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-03-20 10:53:11  阅读:324  来源: 互联网

标签:set LOAN 第一节 informat 读入 SAS 格式 data


目录

1.1 思路

不管对数据是否熟悉,是否有数据字典,下图的读数思路都可以通用。

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";                                              /* 调用宏 */

标签:set,LOAN,第一节,informat,读入,SAS,格式,data
来源: https://www.cnblogs.com/1k-yang/p/12530204.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有