2015-10-17 91 views
0

我使用下面的代碼創建了7個不同的表(tmp1,tmp2 ... tmp7)。每個acc表都有相同的列和名稱,唯一的區別是每個表都位於不同的庫(test1,test2 ... test7)中。有可能做某種循環,而不是在7次以下輸入代碼?SAS創建多個表

proc sql; 
    create table tmp1 as 
    select * 
    from test1.acc 
    where datepart(timestamp) in 
     (select max(datepart(timestamp)) 
       from test1.acc); 
    quit; 
+0

我不清楚你確切的問題是什麼,如何簡化你的查詢?你有什麼問題與時間戳? – Reeza

+0

你使用SAS宏語言嗎?這是避免複製和粘貼的一種方法。它是一種用於生成SAS代碼而不是自己輸入的語言。您也可以考慮將所有七個表格讀入一個SAS數據集。 – Quentin

回答

0

這可以使用SAS Macro語言來完成,該語言是爲這種情況設計的。我不會進行大討論,但以下內容應該有效。公平的警告,我沒有測試這個,所以我可能在某處有語法錯誤,但如果沒有其他的東西,這應該給你一個完成解決方案的基礎。

/*宏以%macro關鍵字開頭。宏可以帶參數,但在這種情況下不需要。宏特定的命令用'%'字符表示。 */

%macro read_multiple_files; 
    %do i = 1 %to 7; 
     /* from this point forward, the use of '&i.' will resolve to the 
      appropriate loop counter 1-7 */ 
     proc sql; 
      create table tmp&i. as 
       select * 
        from test&i..acc 
         where datepart(timestamp) in 
          (select max(datepart(timestamp)) 
           from test&i..acc); 
     run; quit; 
    %end; 
%mend read_multiple_files; 
/* The '%mend' command doesn't really require the name of the macro to be appended, but I consider it to be good practice to include it */ 

/* The preceding code defines the macro program. Now to execute the job, you NEED one last command. */ 

%read_multiple_files; 

我希望這是有幫助的。你會發現宏編程在很多實例中非常有用。這是一個很好的入門白皮書。 http://www2.sas.com/proceedings/sugi29/243-29.pdf