谢谢.
- /*1. %directory;*/
- %macro directory(dir=);
- /*%global nobs name; */ /*定义nobs 与 name为全局宏变量;*/
- %let rs=%sysfunc(filename(filref,&dir)); /*为外部文件(文件夹)指定一个fileref,指定位置&dir;*/
- %let did=%sysfunc(dopen(&filref)); /*打开文件夹,%sysfunc(dopen(fileref));*/
- %let nobs=%sysfunc(dnum(&did)); /*确定(return)文件夹中文件(txt/excel/csv...)的个数,%sysfunc(dnum(directory-id));*/
- %do i=1 %to &nobs.;
- %let name=%qscan(%qsysfunc(dread(&did,&i)),1,.); /*%qscan()查找dread返回的文件名,从位置1开始查,遇见分隔符 . 则忽略;*/
- /*宏函数中的分隔符不用单引号或双引号括起来,但scan函数中的分隔符要加单引号;*/
- /* %let txt=%qscan(%qsysfunc(dread(&did,&i)),-1,.);*/ /*-1是从反向第1个位置查, 这句可以不要;*/
- data WORK.&name. ;
- %let _EFIERR_ = 0; /* set the ERROR detection macro variable */
- infile "&dir.\&name..txt" delimiter='09'x MISSOVER DSD dlm="" lrecl=32767 firstobs=1 ;
-
- informat var1 best1.;
- informat var2 best2.;
- format var1 best1.;
- format var2 best2.;
- input var1
- var2
- ;
- if _ERROR_ then call symputx('_EFIERR_',1); /* set ERROR detection macro variable */
- run;
- %end;
- %let rc=%sysfunc(dclose(&did)); /*dclose是关闭文件夹;*/
- %mend;
- %directory(dir=d:\all_txt);
- /*2. %freq;*/
- /***(1)因原始txt数据文件有两列,依次是阳性频数列与总频数列,
- 需要根据proc freq进行chi-square test的数据格式要求生成频数列;*/
- data zgroup;
- do group = 1 to 2;
- do r = 1 to 2;
- output;
- end;
- end;
- run;
- %macro freq(dir=);
- %let rs=%sysfunc(filename(filref,&dir)); /*为外部文件(文件夹)指定一个fileref,指定位置&dir;*/
- %let did=%sysfunc(dopen(&filref)); /*打开文件夹,%sysfunc(dopen(fileref));*/
- %let nobs=%sysfunc(dnum(&did)); /*确定(return)文件夹中文件(txt/excel/csv...)的个数,%sysfunc(dnum(directory-id));*/
- %do i=1 %to &nobs.;
- %let name=%qscan(%qsysfunc(dread(&did,&i)),1,.); /*%qscan()查找dread返回的文件名,从位置1开始查,遇见分隔符 . 则忽略;*/
- /*宏函数中的分隔符不用单引号或双引号括起来,但scan函数中的分隔符要加单引号;*/
- data work.&name.(keep=freq);
- set work.&name.;
- var1_=var2-var1;
- freq=var1; output;
- freq=var1_; output;
- run;
- data work.&name.; /***将(1)与group数据集横向合并生成所需数据格式;*/
- merge work.zgroup work.&name.;
- run;
- %end;
- proc delete data=work.zgroup;
- run;
- %let rc=%sysfunc(dclose(&did)); /*dclose是关闭文件夹;*/
- %mend;
- %freq(dir=c:\Users\lenovo\AppData\Local\Temp\SAS Temporary Files\_TD8504_);
- /* %freq是临时数据集work的地址*/



雷达卡



京公网安备 11010802022788号







