[英]SAS variable as SQL table name
編輯:感謝您的快速答復。 很明顯,我有很多關於SaS的知識,但是每個人的反應都非常有幫助。
從這里開始,嘗試編寫可輕松在系統之間移植的SAS代碼。
目標:我想讓PROC SQL為多部分表標識符使用全局變量。
/* global variables*/
%LET lib_name="Merge_Contacts"
%LET table_name="Contacts"
/* Simple Query */
PROC SQL;
CREATE TABLE Merged_Contacts AS
SELECT a.*, b.*
/* Below is the problem area */
/* SAS doesn't recognize this as a valid lib/table name */
FROM &lib_name.&table_name
...
/*merge another table*/
QUIT;
我試圖以多種方式將這個標識符串聯起來,但沒有成功。 有什么想法嗎? 謝謝!
/* global variables*/
%LET lib_name=Mrg_ctat; /* lib names 8 characters and you needed ; on
%LET table_name=Contacts; both %let statements Also, remove "" */
/* Simple Query */
PROC SQL;
CREATE TABLE Merged_Contacts AS
SELECT a.*, b.*
/* Below is the problem area */
/* SAS doesn't recognize this as a valid lib/table name */
/* use .. to tag end of first macro variable. This will provide
single . as separator */
FROM &lib_name..&table_name
...
/*merge another table*/
QUIT;
SAS沒有全局變量,但是您可以創建全局MACRO變量。 SAS宏處理器是一種生成代碼的方法。 您不想包括引號字符。 對於宏處理器,所有內容都是字符串,因此無需添加引號來幫助它區分字符串和運算符或變量名。 宏觸發器(%和&)使宏處理器在將某些內容轉發給SAS語言編譯器之前就知道要對某些內容進行特殊處理。
您的%LET
語句還需要以分號結尾來標記語句的結尾。 行尾對於宏處理器或SAS代碼沒有特殊意義。
同樣,SAS libref不能超過8個字符。
/* global MACRO variables*/
%LET lib_name=source ;
%LET table_name=Contacts ;
如果您正在使用的LIBREF尚未定義,那么您可能還需要添加LIBNAME
語句。
libname &lib_name 'physical path' ;
現在您有了兩個宏變量,可以將它們組合以生成數據集引用。 請記住,宏處理器使用句點作為特殊字符來指示宏變量的名稱何時結束。 因此,要在libref和memname之間包含SAS語言語法所需的實際時間,您需要添加另一個時間。
/* Simple Query */
PROC SQL;
CREATE TABLE Merged_Contacts AS
SELECT a.*, b.*
FROM &lib_name..&table_name
...
/*merge another table*/
QUIT;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.