2016-08-04 114 views
1

我正在嘗試使用數組來創建新變量(例如每週和每週更改一次)。我想保持一個命名約定讓我說「訂單」,然後使用數組產生「orders_LY」和「orders_LW」使用SAS陣列創建具有後綴的新變量

這一個工程(從下面的代碼)

LW=lag1(figures{i}); 

雖然這是不是我想要的,

這一個沒有

figures{i}_LY=lag53(figures{i}); 


data summary_&type._&date.; 
    set summary; 


    array figures {5} tv_total_orders_&type. tv_total_bookings_&type. TV_AOV_&type. total_orders_&type. total_bookings_&type. ; 
    do i=1 to 5; 

    LW=lag1(figures{i}); 
    figures{i}_LY=lag53(figures{i}); 


    end; 
    run; 
+0

創建另一個數組? – Joe

+0

將數組引用傳遞給滯後函數時要小心。當您編寫'lag1(圖{i})'時,滯後函數僅爲陣列的每個元素創建一個隊列,而不是一個隊列。所以tv_total_orders_&type的值將被寫入tv_total_book_&type等,這可能不是你想要的。 – Quentin

回答

1

所以,你不能在數據步飛修改數組變量名。數據步驟編譯時必須知道變量名稱。

你有兩個選擇,那麼:

首先,你可以創建第二個陣列,像這樣:

figures_ly {5} tv_total_orders_&type._ly tv_total_bookings_&type._ly TV_AOV_&type._ly total_orders_&type._ly total_bookings_&type._ly ; 

(你可能需要做的變量屬性初始化,我不知道你的數據)如果你在編程時知道你需要什麼,這是最好的,變量列表不會改變。

其次,您可以使用宏語言來定義這些LY變量。如果需要經常更改變量列表和/或在運行程序(它是數據驅動的)之前不知道列表,則這更合適。如果是這種情況,您應該發佈更多關於如何確定列表以獲得有用回覆的信息。

2

Joe是正確的,因爲您無法快速定義它們,但是您可以創建需要單獨構建的結構,然後根據現有結構定義陣列。這裏有一個例子:

創建,我們要後綴添加到一些變量:

data fields; 
    length field $50; 
    input field $; 
    datalines; 
orders 
sold 
billed 
cost 
gp 
; 
run; 

添加後綴:

data config; 
    length new_name $50; 
    set fields; 
    new_name = field; output; 
    new_name = cats(field,'_LW'); output; 
    new_name = cats(field,'_LY'); output; 
    dummy=1; 
run; 

移調它來獲得後綴的變量作爲列名:

proc transpose data=config out=trans(drop=_name_); 
    id new_name; 
    var dummy; 
run; 

現在您可以基於現有名稱定義數組。