2013-07-13 99 views
1

我有一個sas數據集。在它裏面我有一些變量跟在一個模式下如何在sas中動態地重命名變量?

-W 51 Sales 
-W 52 Sales 
-W 53 Sales 

等等。

現在我想重新命名所有這些變量動態等的那w^51由開始那一週的日期,新的名稱將成爲取代 - 2013年5月2日銷售

我想重新命名它們的原因是我有一年中所有53周的銷售數據,並且數據集對我來說會更加容易理解,如果我有一週的開始日期而不是W(week_no )以變量名稱銷售

有沒有什麼方法可以在sas中做到這一點?

+0

我理解了所有的單詞,但放在一起他們沒有意義。發佈數據的「proc print」以及你想要的輸出結果。 –

+1

你確定你的意思是變量而不是變量的內容嗎?由於不尊重V7變量名限制當然不是一個好主意。 – mvherweg

+0

那麼我不想重命名變量的內容。只是變量的名稱 – user1946152

回答

4

你真的不想重命名你的變量。你可能會認爲你會這麼做,但最終會咬你的。

可以做的是給他們描述性標籤。這可以通過proc datasets完成。

proc datasets library=<lib>; 
    modify <dataset>; 
    label <variable> '5/2/2013 sales'; 
run; 
1

只是爲了好玩讓我們假設你想這樣做,反正 - 最安全的事情做的僅僅是創建數據集爲輸出的副本...

此代碼假定您的變量名命名像w1_sales和輸出名稱將被重命名爲03JAN2013_sale或類似的東西。

 data newDataSet; 
     set oldDataSet; 

    %MACRO rename_vars(mdataset,year); 
     data &mdataset.; 
      set &mdataset.; 
      %do i = 1 %to 53; 
      %let weekStartDate = %sysfunc(intnx('week&i','01jan&year.'d,0));   %*returns the starting day of week(i) uses sunday as starting date. If you want monday use 0.1 as last param;  
      %let weekstartDateFormatted = %sysfunc(putn(&weekStartDate.,DATE.))  %*formats into ddMONyyy. substitute whatever format you want; 
      rename w&i._Sale = &weekstartDateFormatted ._SALES; 
      %end; 
      run; 
    %MEND rename_vars; 

    %rename_vars(newDataSet,2013); 

我現在沒有時間來測試這個權利,所以sommebody讓我知道如果我搞砸了某個地方。這應該至少讓你去。或者你可以發送我或發佈一些代碼來讀取一個小樣本數據集(顯然,如果這是可能的,而不必共享一些專有信息,你可能必須將它泛化)與這樣的變量,我會調試它。