我在二月八日發表了一篇關於如何大量重新命名新變數的文章(How to concatenate two variables with array)。當時寫完覺得自己很屌,但今天看到一篇文章後頓時覺得自己很遜。原先的設計是要將上千個變數切成兩半,前半段包含舊變數的第一個字母,並且重新命名為「舊變數a」,後半段包含舊變數的最後一個字母,並且重新命名為「舊變數b」。 原始的程式主要是將變數名稱另存一個新檔,針對那個檔來做重新命名的工作,然後再把新變數名稱存出來貼到另一個程式去做切割舊變數的動作。但有個神人寫了一個可以自動重新命名的 macro,讓上述動作在數行程式碼之間迅速完成!! 這篇文章可至 SUGI 的官方網站下載,但我已經大部分的文件弄成一個簡單的中文說明放在我的 SUGI CLUB 裡面。有興趣的人可以去看一看。 舊的程式碼我就不列了,可以到之前的文章看。新的程式碼如下: %include <把add_string macro的路徑放入>; %let old_vars=<裡面把所有舊變數名稱全部放入>; %let N=<放入變數總數>; data newset; set oldset; array old[*] &old_vars; array recode1[*] %add_string(&old_vars, a); array recode2[*] %add_string(&old_vars, b); do i = 1 to &N; recode1[i]=substr(old[i],1,1); recode2[i]=substr(old[i],3,1); end; run; 裡面的 %add_string 就可以將所有 old_vars 裡面的舊變數後面多加一個 a 或 b。然後這新的變數放進兩個不同的陣列,再用 substr 指令去割舊變數就完成了。

-----
文章標籤
全站熱搜
創作者介紹
創作者 cchien 的頭像
cchien

ToTo 奇妙の冒險

cchien 發表在 痞客邦 留言(0) 人氣(176)