Macros SAS";错误:变量已定义为字符和数字;

Macros SAS";错误:变量已定义为字符和数字;,macros,format,sas,Macros,Format,Sas,基本上,我需要导入多个excel文件并简单地将它们堆叠起来。我编写了一个宏来实现这一点,但在代码的末尾,在堆栈部分,出现了多条错误消息: 错误:变量XX已定义为字符和数字。 我试图在宏中修改格式,但不起作用。 (我试过“格式F1=DDMMYY10,F2=12.8,F7=12美元”) 我还需要只保留F1-F7。但是log说“在这个版本的SAS系统的过程步骤中不支持DROP和KEEP语句。”因此,这些语句被忽略 请看一下我的代码,告诉我应该如何修改它好吗? 代码如下: %LET TOTAL=4; %

基本上,我需要导入多个excel文件并简单地将它们堆叠起来。我编写了一个宏来实现这一点,但在代码的末尾,在堆栈部分,出现了多条错误消息: 错误:变量XX已定义为字符和数字。 我试图在宏中修改格式,但不起作用。 (我试过“格式F1=DDMMYY10,F2=12.8,F7=12美元”) 我还需要只保留F1-F7。但是log说“在这个版本的SAS系统的过程步骤中不支持DROP和KEEP语句。”因此,这些语句被忽略

请看一下我的代码,告诉我应该如何修改它好吗? 代码如下:

%LET TOTAL=4;
%LET PATH=H:\test\;

%LET INFILE1=a (1).xlsx;
%LET INFILE2=a (2).xlsx;
%LET INFILE3=a (3).xlsx;
%LET INFILE4=a (4).xlsx;

%MACRO EXCELREAD(I,INFILE);
PROC IMPORT OUT=TEST_&i
            DATAFILE="&PATH.&INFILE"
            DBMS=EXCEL REPLACE; 
     GETNAMES=NO;
     MIXED=YES;
     SCANTEXT=YES;
     USEDATE=YES;
     SCANTIME=YES;
    /*KEEP F1 F2 F3 F4 F5 F6;
    FORMAT F1=DDMMYY10, F2=12.8, F7=$12;*/
RUN;
%MEND;
%EXCELREAD(1,&INFILE1);
%EXCELREAD(2,&INFILE2);
%EXCELREAD(3,&INFILE3);
%EXCELREAD(4,&INFILE4);


data pilot_bond;
set test_1      
    test_2(firstobs=2)
    test_3(firstobs=2)
    test_4(firstobs=2)
run;
以下是错误消息:

3712  data pilot_bond;
3713      set test_1
3714          test_2(firstobs=2)
3715          test_3(firstobs=2)
3716          test_4(firstobs=2)

ERROR: Variable F1 has been defined as both character and numeric.
ERROR: Variable F2 has been defined as both character and numeric.
ERROR: Variable F6 has been defined as both character and numeric.
ERROR: Variable F7 has been defined as both character and numeric.
ERROR: Variable F6 has been defined as both character and numeric.
ERROR: Variable F6 has been defined as both character and numeric.
3730  run;
任何帮助都将不胜感激!
进一步简化代码的建议也非常受欢迎。

我不确定工作表的外观,但通过查看错误,似乎F1列是excel中的一个字符值,如果打开excel,如果在FI数据单元格中看到绿色标记,则它是一个字符值,则需要
1.首先使用“导入”向导导出.xlsx文件中的数据,
2.然后运行上面的程序

这应该可以解决你的问题