老师好,我有这样一个问题:
现在我需要通过一个宏来读入大量的数据,其中有一个变量id,多数文件将其读入为数值型,但少部分会将其读为文本型.如何在宏中实现将所有变量强制以文本型读入呢?谢谢
以下是代码大略:
/*建立一个装文件名的数据集,文件被命名为rebate_01 - rebate_11*/
data RebateNames(keep=name);
x=0;
do i=1 to 11;
x=x+1;
if i<10 then name='Rebate_0'||trim(left(put(x,6.)));
else name='Rebate_'||trim(left(put(x,6.)));
output;
end;
run;
/*宏*/
%macro in(name=);
PROC IMPORT OUT= &name
DATAFILE= "D:\EPS09-03\EPS09-03 Rebate Input\&name..txt"
DBMS=TAB REPLACE;
GETNAMES=YES;
DATAROW=2;
data &name;
/*我觉得问题出在这里,应该怎样才能把所有变量以字符串形式强制读入呢?*/
set &name;
Individual_ID1 = put(Individual_ID, $19.);
Site_ID1 = put(Site_ID, $19.);
All_in_One_Serial_Number1=put(All_in_One_Serial_Number, $20.);
Scanner_Serial_Number1=put(Scanner_Serial_Number, $20.);
Camera_Serial_Number1=put(Camera_Serial_Number,$20.);
Print_Scan_Serial_Number1=put(Print_Scan_Serial_Number, $20.);
Printer_Serial_Number1=put(Printer_Serial_Number, $20.);
Projector_Serial_Number1=put(Projector_Serial_Number, $20.);
drop Individual_ID Site_ID All_in_One_Serial_Number Scanner_Serial_Number Camera_Serial_Number
Print_Scan_Serial_Number Printer_Serial_Number Projector_Serial_Number;
rename Individual_ID1 =Individual_ID Site_ID1 =Site_ID All_in_One_Serial_Number1=All_in_One_Serial_Number
Scanner_Serial_Number1=Scanner_Serial_Number
Camera_Serial_Number1= Camera_Serial_Number Print_Scan_Serial_Number1= Print_Scan_Serial_Number
Printer_Serial_Number1=Printer_Serial_Number Projector_Serial_Number1=Projector_Serial_Number;
RUN;
%mend;
data _null_;
set RebateNames;
call execute('%in(name= '||name||' )');
run;
谢谢老师