Re: [問題]討教一段小小的SAS Macro問題
※ 引述《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
01/13 21:50, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):