簡體   English   中英

SAS變量作為SQL表名稱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM