zoukankan      html  css  js  c++  java
  • SAS | 数据读入思路及代码

     

    1 读入思路

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

     

    2 读入代码

    *1.设置读入的记录数:全局变量,可设置为指定数字,全量读入设为max;
    option obs=1000;    /* max */
    
    
    *2.import语句读入;
    proc import 
    datafile = 'C:Users
    ajinDesktop	est.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
    ajinDocumentsX_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:datasas_filezxRAWDATAGZNS_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";						  /* 调用宏 */
    
    
  • 相关阅读:
    SCOPE_IDENTITY和@@identity的区别
    IE6.0、IE7.0 与FireFox CSS兼容的解决方法
    DivCSS布局基础:CSS中控制换行的四种属性
    load的用法(问题未解决)
    设置每个li的margin距离(巧设计)
    IE6下设置float和margin的问题
    在IE7下设置zindex没有反应
    做css页面时,注意的地方
    专题页
    IE8下margintop问题
  • 原文地址:https://www.cnblogs.com/1k-yang/p/12530204.html
Copyright © 2011-2022 走看看