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

posted @ 2020-03-20 10:46  1k-yang  阅读(1192)  评论(0编辑  收藏  举报