作者alias (希望)
看板Statistics
标题Re: [问题]讨教一段小小的SAS Macro问题
时间Sun Jan 13 20:13:56 2008
※ 引述《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
1F:推 ayung0508:感恩!!Very clear~ 01/13 21:50