全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2761 6
2010-08-20
http://www.pinggu.org/bbs/thread-888061-1-1.html原程序在这里
data a2;
num=0;
do _n_=1 by 1 until(last._col0);
set a1;
by _col0;
num+1;
output;
end;
run;
proc sql;
select max(num) into : obs
from a2;
quit;
%macro aa();
data a3;
do i=1 by 1 until(last._col0);
set a1;
by _col0;
array m(*) m1-m%left(&obs.);
m(i)=rate3_change;
end;
drop i rate3_change;
run;
%mend;
%aa;

这个哥们先后用转置和数据实现了按照要求读入数据并实现既定的数据集格式
先分析这个哥们的程序:
1.建立数据集A1,并进行排序,为后面的SET做一个准备
2.在建立数据集A2的时候,设置一个变量NUM,这个变量是表示有每一_COLO重复的次数,这个很关键,因为后面就是根据重复的次数来设置数组的。
3.将每一个_COLO重复的次数的变量NUM,用SQL赋值给一个宏变量,然后作为数组的界值,而且随着_n_的不同,引起的NUM不同,导致数组的界值不同,因为相同的_COLO的rate3_change能在一个观测里体现出来。

这个里面最关键的是寻找宏循环中数组的界值与_COLO重复次数,用了一个NUM和宏变量&obs.
值得学习的一点
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2010-8-20 01:42:06
data a2;
num=0;
do _n_=1 by 1 until(last._col0);
set a1;
by _col0;
num+1;
output;
end;
run;
proc sql;
select max(num) into : obs
from a2;
quit;
以上的求obs的过程太复杂了。。。
%macro aa(); ***这个macro没有用,应该去掉;
data a3;
do i=1 by 1 until(last._col0); ***这一步用的好;解决了1. 非_TEMPORARY_ ARRAY无法retain的问题,2.自动输出last by观测 100分精华;
set a1;
by _col0;
array m(*) m1-m%left(&obs.);***等同于array m{&obs};
m(i)=rate3_change;
end;
drop i rate3_change;
run;
%mend;***去掉;
%aa;***去掉;
其实这道题的正解是proc transpose,也是他给出的答案。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-8-20 02:26:25
辛苦了,crackman!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-8-20 13:23:37
。。。。。。。。。。。。。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-8-20 13:32:33
1 我们都是看hopewell的程序长大的,伴我们度过了整个童年
2 不是"哥们"......
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-8-20 13:53:05
不是哥们。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群