我需要从excel导入多张表。
我目前正在做的是
%let _path = C:\;
%let _name = AOL.xlsx;
%let sheet_list = AG ST;
%macro Import;
%local current_sheet;
%do i = 1 %to %sysfunc(countw(&sheet_list.));
%let current_sheet = %scan(&sheet_list., &i);
proc import out=SQ_¤t_sheet. replace datafile="&path.\&_name.";
sheet="¤t_sheet.";
run;
%end;
%mend Import;
%Import;
但是其他一些表的名字包含空格。
%let sheet_list = AG 11, AG 12, ST;
如何调整上述代码以满足这种情况?
答案 0 :(得分:2)
只需将其他参数用于COUNTW()
和%SCAN()
函数,以便设置分隔符。我不会使用逗号作为分隔符,因为它需要宏引用才能在函数调用中使用它。使用类似于工作表名称的无效字符|
之类的内容。
%let _path = C:\;
%let _name = AOL.xlsx;
%let sheet_list = AG 11|AG 12|ST;
%macro Import;
%local i current_sheet;
%do i = 1 %to %sysfunc(countw(&sheet_list,|));
%let current_sheet = %scan(&sheet_list., &i, |);
proc import out=SQ_¤t_sheet. replace datafile="&path.\&_name.";
sheet="¤t_sheet.";
run;
%end;
%mend Import;
%Import;
实际上,当尝试将工作表名称用作SAS数据集名称的一部分时,工作表名称中的空格也会造成问题。您可以用下划线替换空格。
...
%local i current_sheet member_name;
...
%let member_name = %sysfunc(translate(SQ_¤t_sheet,_,%str( )));
proc import out=&member_name replace datafile="&_path.\&_name.";
...
答案 1 :(得分:1)
如果您的工作表列表以逗号分隔,则只需计算:
a)逗号+ 1(对于单词)
b)直接用逗号作为分隔符的单词数
if self.request.method == 'POST' and request.is_ajax:
答案 2 :(得分:0)
你真的需要数字吗?好像你只想要像
这样的东西output <- data.frame(...) # declare the appropriate dataframe
for (files in folder)
for (i in loop2)
for (j in loop3)
res <- ... # compute some result
name <- ... # compute some name for the current row
output <- rbind(output,res) # Fill the data frame...
rownames(output)[nrow(output)]<-rowname # ... with a specific row name
但SAS在MACRO语言中没有这种语法,所以你必须自己编写。您还需要能够指定单词分隔符。
FOR word IN list DO import END
答案 3 :(得分:0)
根据您的代码,可以在修改后使用。
%let sheet_list =%str(AG 11, AG 12, ST);
%macro Import;
%local current_sheet;
%do i = 1 %to %sysfunc(countw(&sheet_list,%str(,)));
%let current_sheet = %scan(&sheet_list., &i,%str(,));
proc import out=SQ_¤t_sheet. replace datafile="&path.\&_name.";
sheet="¤t_sheet.";
run;
%end;
%mend Import;
%Import;