Re: [問題]討教一段小小的SAS Macro問題

看板Statistics作者 (希望)時間18年前 (2008/01/13 20:13), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《ayung0508 (阿勇就是我)》之銘言: : 不好意思~小弟又跑SAS跑到一半又有問題來發問了 : 程式碼如下: : %let dyr = 1963 1964 1965 1966 1967 1968 1969 1970 : 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 : 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 : 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 : 2001 ;/*令dry為1963~2001的字串*/ : %let yprd= 39; /*令yprd為39的字串*/ : %macro prebeta; : %do i = 1 %to &yprd; /*令i為執行迴圈:從1到39*/ : %let yr = %scan(&dyr, &i) ; :      ↑↑↑↑↑↑↑↑↑ : %let syr = %eval(&yr - 5); :           ↑↑↑↑↑↑↑ : %let eyr = %eval(&yr -1); : 請問程式碼中的%scan(&dyr,%i)代表什麼意思? %scan(&dyr, &i) 是指以空白為間隔(預設值), 對 &dyr 裡的字串去切割成小字串 然後取出切割後第 &i 個子字串 以你的例子來說, &dyr 將可區分成 39個子字串, 也就是 1963~2001 當 &i=1 時, yr會得到的是第一個子字串, 也就是1963 當 &i=10 時, yr會得到的是第十個子字串, 也就是1972 : 再者程式碼中的%eval(&yr - 5)幼代表什麼意思呢?我知道可能是呼叫出來的"年"減去5, : 但是我不知道是哪個年,因為他呼叫到上一行的yr %eval 在這裡就如同你猜測的, 是做 &yr 減去5 的動作 而對哪個 yr, 我上面已經提示了 : 感謝有能解答者的大大請賜教~ 如果對 %scan 和 %eval 想再了解的清楚一點 建議你, 不妨去 http://v8doc.sas.com/sashtml/ 查查 你會得到更多你想要的答案 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.231.74.206

01/13 21:50, , 1F
感恩!!Very clear~
01/13 21:50, 1F
文章代碼(AID): #17YW25qj (Statistics)
文章代碼(AID): #17YW25qj (Statistics)