Loops 在宏中嵌套SAS宏以处理项目子集
我有一组名为m6.csv到m22.csv的csv文件,其中文件名中的数字随着每个新文件的增加而增加1。所有数据集都有一个名为Loops 在宏中嵌套SAS宏以处理项目子集,loops,sas,conditional-statements,sas-macro,datastep,Loops,Sas,Conditional Statements,Sas Macro,Datastep,我有一组名为m6.csv到m22.csv的csv文件,其中文件名中的数字随着每个新文件的增加而增加1。所有数据集都有一个名为passedchecks的变量,但只有在某些数据集中它才有用。我想对几个(但不是全部)数据集(m8、m13、m18和m19)进行子集,只包括通过检查的观察值,因为它们被读入SAS,而不为这些数据集编写单独的宏 当前宏使用proc import读取csv文件,然后通过passedchecks标志将所有新SAS数据集子集化,而不仅仅是感兴趣的四个。最后将所有数据集的内容打印到控
passedchecks
的变量,但只有在某些数据集中它才有用。我想对几个(但不是全部)数据集(m8、m13、m18和m19)进行子集,只包括通过检查的观察值,因为它们被读入SAS,而不为这些数据集编写单独的宏
当前宏使用proc import
读取csv文件,然后通过passedchecks
标志将所有新SAS数据集子集化,而不仅仅是感兴趣的四个。最后将所有数据集的内容打印到控制台
%let rawcsv = C:\Users\Desktop\rawfolder\;
%macro inputter(first=6, last=22); /*change this when m20-m22 come in for wave 3 (DONE ON 03/02/2021)*/
%do i=&first. %to &last. %by 1;
proc import datafile="&&rawcsv.m&&i..csv"
out=m&i replace
dbms=csv;
guessingrows=500;
run;
/*BEGIN: part I just want to do where i = 8, 13, 18, and 19*/
data m&i;
set m&i;
where passedchecks=1;
run;
/*END: part I just want to do where i = 8, 13, 18, and 19*/
proc contents data=m&i varnum;
title2 "contents of m&&i file";
run;
%end;
%mend;
%inputter;
有没有办法修改它,使其处理m8、m13、m18和m19数据集的方式不同于其他数据集?当然可以。添加一个条件以检查这些值。我们将添加minoperator
和mindelimiter='
选项,并检查&i
是否在指定的空格分隔列表中。此选项告知宏工具将
中的视为运算符,并使用空格分隔要检查的值。例如:&红色、绿色、蓝色代码>
%macro inputter(first=6, last=22, checkData=) / minoperator mindelimiter=' ';
/*change this when m20-m22 come in for wave 3 (DONE ON 03/02/2021)*/
/* Clean checkData of any extra spaces */
%let checkData = %cmpres(&checkData.);
%do i=&first. %to &last. %by 1;
proc import datafile="&&rawcsv.m&&i..csv"
out=m&i replace
dbms=csv;
guessingrows=500;
run;
/*BEGIN: part I just want to do where i = 8, 13, 18, and 19*/
%if(&i. IN &checkData.) %then %do;
data m&i;
set m&i;
where passedchecks=1;
run;
%end;
/*END: part I just want to do where i = 8, 13, 18, and 19*/
proc contents data=m&i varnum;
title2 "contents of m&&i file";
run;
%end;
%mend;
%inputter(checkData=8 13 18 19);
为什么要使用PROC导入来读取文本文件?它必须猜测如何定义变量。因此,每个文本文件都可以生成具有不同变量属性的数据集。只需编写自己的数据步骤来读取文本文件,这样就可以完全控制变量的定义方式。这些是csv文件,每个文件中有数千个变量。顺序、结构和变量名也各不相同,如果我添加更多文件(例如,和m23.csv),这使得数据步骤解决方案大大增加了时间密集度,并且不易复制。猜测行需要更多的计算时间,但需要花费更少的时间。每个变量的内容都足够可靠,因此不必担心整个“不同的变量属性”。虽然(此处未显示)我合并了proc内容结果并进行检查。