Loops SAS使用DO循环读取多个文件,但需要在每次迭代中追加表以防止丢失数据
当我运行宏将多个文件中的数据输入一个SAS表时,它会在下一次迭代开始时替换正在读取的每个数据集。因此,最后一个表中剩下的唯一数据是我在循环中读取的最后一个文件。如何在每次读入迭代结束时追加输出表,以防止每次移动到下一个文件时丢失数据 当前代码:Loops SAS使用DO循环读取多个文件,但需要在每次迭代中追加表以防止丢失数据,loops,macros,sas,append,Loops,Macros,Sas,Append,当我运行宏将多个文件中的数据输入一个SAS表时,它会在下一次迭代开始时替换正在读取的每个数据集。因此,最后一个表中剩下的唯一数据是我在循环中读取的最后一个文件。如何在每次读入迭代结束时追加输出表,以防止每次移动到下一个文件时丢失数据 当前代码: %let type=40; %let year=2015; %let months =07; %let days = 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21
%let type=40;
%let year=2015;
%let months =07;
%let days = 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31;
%let filetype=.csv;
%macro import_files;
%do K=1 %to 31; /*day*/
/*Scans through Macro Variable Arrays to find current month, year and letter group*/
%let nmbr = %scan(&type,1);
%let yr=%scan(&year,1);
%let mnth=%scan(&months,1);
%let day=%scan(&days,&K);
/*Creates string variables for Export and import locations of files using macro loop variables*/
%let exportfile = "C:\Users\wwn\Documents\HistoricalRateTesting\Top&nmbr&yr&mnth&day&filetype";
%let src = "\\2119\Raw_Data\Transposed_Canvass\Top&nmbr&yr&mnth&day&filetype";
/*Imports All files in that Alpha, Year and Month Group*/
DATA work.RAW_DATA;
INFILE &src firstobs=3 LRECL=1000 DELIMITER=',' TRUNCOVER DSD;
/* informat arv_dt mmddyy10. shop_dttm DATETIME18. arv_tm time5. rtrn_tm time5.;*/
/* format shop_dttm DATETIME18. arv_tm time5. rtrn_tm time5.;*/
INPUT
city_cd : $CHAR3.
rtrn_city_cd : $CHAR3.
shop_car_type_cd : $CHAR4.
shop_rt_categ : $CHAR2.
shop_rt_type : $CHAR1.
lor : ?? BEST2.
arv_tm : ?? TIME5.
rtrn_tm : ??TIME5.
arv_dt : ?? MMDDYY10.
shop_dttm : ANYDTDTM.
Brand_ZE : ?? BEST10.2
Brand_ZI : ?? BEST10.2
Brand_ZL : ?? BEST10.2
Brand_ZD : ?? BEST10.2
Brand_AL : ?? BEST10.2
Brand_ZR : ?? BEST10.2
Brand_ET : ?? BEST10.2
Brand_ZT : ?? BEST10.2
Brand_AD : ?? BEST10.2
Brand_ZA : ?? BEST10.2
Brand_EZ : ?? BEST10.2
Brand_SX : ?? BEST10.2
Brand_FX : ?? BEST10.2
Brand_FF : ?? BEST10.2;
RUN;
%end;
%mend import_files;
%import_files;
看起来所有的文件都有相同的布局,这是自SAS 8.2以来的一个不错的技巧 首先声明所有文件的列表。 如果您的目录包含所有要读取的文件,并且仅包含以下文件:
filename myfiles ("\\2119\Raw_Data\Transposed_Canvass\*");
然后在infle
语句中使用声明myfiles
:
DATA work.RAW_DATA;
INFILE myfiles firstobs=3 LRECL=1000 DELIMITER=',' TRUNCOVER DSD;
/* ... */
RUN;
如果您的文件夹中包含其他文件,您首先必须使用一个小宏来精确指定要读取的文件,以展开文件列表,这样您就可以
filename myfiles ("path_to_file1","path_to_file2","path_to_file3"...);
看起来所有的文件都有相同的布局,这是自SAS 8.2以来的一个不错的技巧 首先声明所有文件的列表。 如果您的目录包含所有要读取的文件,并且仅包含以下文件:
filename myfiles ("\\2119\Raw_Data\Transposed_Canvass\*");
然后在infle
语句中使用声明myfiles
:
DATA work.RAW_DATA;
INFILE myfiles firstobs=3 LRECL=1000 DELIMITER=',' TRUNCOVER DSD;
/* ... */
RUN;
如果您的文件夹中包含其他文件,您首先必须使用一个小宏来精确指定要读取的文件,以展开文件列表,这样您就可以
filename myfiles ("path_to_file1","path_to_file2","path_to_file3"...);
每次新的数据集工作时,您都会以这种方式创建.RAW_数据。只需为k=1创建一次,然后使用proc appender,这可能会有所帮助。看来你已经找到了约会问题的答案了?每次新的数据集工作时,您都会以这种方式创建.RAW_数据。只需为k=1创建一次,然后使用proc appender,这可能会有所帮助。看来你已经找到了约会问题的答案了?它处理所有文件中的标题吗?您可以在infle语句中包含通配符,而不需要在filename语句中包含通配符。这会处理所有文件中的标题吗?您可以在infle语句中包含通配符,而不需要在filename语句中包含通配符。