作者socery (keep going!)
看板Statistics
标题Re: [程式] SAS set多个不连续档名档案的问题
时间Wed Feb 15 23:34:27 2012
※ 引述《eva02 ()》之铭言:
: [软体程式类别]:SAS
: [程式问题]:资料处理
: [软体熟悉度]:
: 低(1~3个月)
: [问题叙述]:
: 要将各公司的资料set到单一资料里计算平均值,
: 已经写macro call symput资料名称了,
: 可是不知道怎麽在回圈里将他们set到单一资料中。
: [程式范例]:
: %macro table1(t);
: %do i=1 %to &t;
: data _null_;
: set tmp1.xxx;
: if _n_=&i then do;
: call symput('cc',个别公司档名)
: end;
: run;
: /*这边开始是参考网路上的写法,
: 可是我这样插入只会在all_table里放进t次同一间公司的资料而已,
: 而且回圈只跑一次就停了*/
: data all_table;
: set %do i=1 %to &t;
: &cc
: %end;;
1. 外面那层do 已经用i 了 这边请改用别的参数
2. 由於这边被包在里面, 当外面i=1时, &cc 是 _n_ = 1的资料
这样写就等同於你的all_table set t 次 _n_ = 1 的资料, 所以会错
3. 当外面i=2时, &cc 是 _n_ = 2 的资料
此时all_table是set t 次过後 _n_ = 1 的资料, 但是你在这又覆盖她
所以all_table变成set t 次 _n_ = 2 的结果...
依此类推, 你这种写法会导致你set t 次 _n_ = &t 的资料
: %end;
: %mend table1;
: 谢谢:)
我的写法, 请在macro 外面先把你 all_table 建好, 可以利用attrib 建立应有的变数
然後比第二段删掉改成 proc append base = all_table data = &cc;run;
参考看看~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.194.131.25
1F:推 eva02:谢谢:D 02/15 23:37