Loops SAS使用DO循环读取多个文件,但需要在每次迭代中追加表以防止丢失数据

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

当我运行宏将多个文件中的数据输入一个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 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语句中包含通配符。