|
楼主

楼主 |
发表于 2011-5-7 17:51:35
|
只看该作者
sas test--求每个班级各个科目的最高分
From SAS_Miner's blog on Sina
<p><font COLOR="#0000FF">已知:数据集score记录的是每个班级各个科目(语文、数学)的三个最高分<br />
要求:生成数据集result(按班级横向排列各个科目的三个高分成绩)</FONT></P>
<p><font COLOR="#000000"><b>data</B> score;</FONT></P>
<p><font COLOR="#000000">
input class rank chinese maths;</FONT></P>
<p><font COLOR="#000000">
cards;</FONT></P>
<p><font COLOR="#000000">
1 1 100 98</FONT></P>
<p><font COLOR="#000000">
1 2 97 95</FONT></P>
<p><font COLOR="#000000">
1 3 95 93</FONT></P>
<p><font COLOR="#000000">
2 1 98 89</FONT></P>
<p><font COLOR="#000000">
2 2 94 88</FONT></P>
<p><font COLOR="#000000">
2 3 90 87</FONT></P>
<p><font COLOR="#000000">
3 1 100 89</FONT></P>
<p><font COLOR="#000000">
3 2 90 86</FONT></P>
<p><font COLOR="#000000">
3 3 89 83</FONT></P>
<p><font COLOR="#000000">
;</FONT></P>
<p><font COLOR="#000000">result<br />
class chinese1 chinese2 chinese3 maths1 maths2 maths3<br />
1 100 97 95 98 95 93<br />
2 98 94 90 89 88 87<br />
3 100 90 89 89 86 83</FONT></P>
<p><font COLOR="#0000FF"> </FONT></P>
<p><font COLOR="#0000FF">法一:</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>data</B>
result;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">retain class;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">do i=<b>1</B> to
<b>3</B>;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">array c(<b>3</B>)
chinese1-chinese3;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">array m(<b>3</B>)
maths1-maths3;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">set score ;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">c(i)=chinese;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">m(i)=maths;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">end;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">drop i chinese maths rank
;</FONT></P>
<p><font COLOR="#0000FF"><b>run</B>;</FONT></P>
<p><font COLOR="#0000FF"> </FONT></P>
<p><font COLOR="#0000FF">法 二:</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">*** tranpose
macro</FONT></P>
<p><font COLOR="#0000FF"><b>%macro</B>
transpose(indate,i,n,class);</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">%do m=<b>1</B> %to
&n;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">proc transpose
data=&indate
out=score%scan(&i,&m)(drop=_name_)
prefix=%scan(&i,&m);</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">by
&class;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">var
%scan(&i,&m);</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">run;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">%end;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">data result;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">merge</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">%do j=<b>1</B> %to
&n;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">score%scan(&i,&j)</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">%end;;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">by
&class;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">run;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>%mend</B> ;</FONT></P>
<p><font COLOR="#0000FF">%<b><i>transpose</I></B>(score,chinese
maths,<b>2</B>,class);</FONT></P>
<p><font COLOR="#0000FF">法三:</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">merge macro</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">*************************indate输入数据集;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">************************v
需转置的变量中间用空格隔开;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">***********************n
需转置的变量个数;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">***********************class
分组变量;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">**********************r
每组里的不同次数;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>%macro</B> merge
(indate,v,n,class,r);</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">proc sql noprint;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">select count(distinct
&r) into :rank from
&indate;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">quit;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">data result;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">merge</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">%do i=<b>1</B> %to
&rank;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">score(rename=(%do j=<b>1</B>
%to &n ;
%scan(&v,&j)=%scan(&v,&j)&i.
%end; )
where=(&r=&i))</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">%end;;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">by
&class;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">drop
&r;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">run;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">data result;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">retain class %do i=<b>1</B>
%to &n; %do j=<b>1</B> %to
&rank;
%scan(&v,&i)&j %end
;%end;;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">set result;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">run;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>%mend</B>;</FONT></P>
<p><font COLOR="#0000FF">%<b><i>merge</I></B>(score,chinese
maths,<b>2</B>,class,rank);</FONT></P>
<p><font COLOR="#0000FF">法四:</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>%macro</B>
arr(indate,v,n,r,class);</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">data result;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">retain
&class;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">%do i=<b>1</B> %to
&n;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">array
c&i(&r)</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">%do j=<b>1</B> %to
&r;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">%scan(&v,&i)&j
%end ;;%end;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">do k=<b>1</B> to
<b>3</B>;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">set
&indate;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">%do m=<b>1</B> %to
&n;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">c&m.(k)=%scan(&v,&m.);%end;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">end;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">keep &class
%do i=<b>1</B> %to &n; %do j=<b>1</B> %to
&r;
%scan(&v,&i)&j %end
;%end;;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">run;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>%mend</B>;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">%<b><i>arr</I></B>(score,chinese maths,<b>2</B>
,<b>3</B>,class);</FONT></P>
<p><font COLOR="#0000FF">法五:</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>proc</B> <b>sort</B>
data=score;by class rank;<b>run</B>;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>proc</B> <b>transpose</B>
data=score out=a;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">by class;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">var chinese maths;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>run</B>;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>data</B>
chinese(drop=_NAME_) ;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">set
a(where=(_NAME_='chinese') rename=(COL1=chinese1 COL2=chinese2
COL3=chinese3 ));</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>run</B>;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>data</B>
maths(drop=_NAME_) ;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">set a(where=(_NAME_='maths')
rename=(COL1=maths1 COL2=maths2 COL3=maths3 ));</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>run</B>;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>data</B> all;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">merge</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
chinese (in=a)</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
maths
(in=b)</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">by class;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">if a or b;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>run</B>;</FONT></P>
<p><font COLOR="#0000FF">法六:</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>proc</B> <b>transpose</B>
data=score out=score2 prefix=chinese;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
var chinese ;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
by class;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>run</B>;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>proc</B> <b>transpose</B>
data=score out=score3 prefix=maths;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
var maths;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
by class;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>run</B>;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>data</B>
score4(drop=_name_);</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
merge score2 score3;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>run</B>;</FONT></P>
<p><font COLOR="#0000FF">法七:</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>proc</B> <b>transpose</B>
data=score out=result;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
by class;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
var chinese maths ;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>run</B>;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>proc</B> <b>transpose</B>
data=result out=result2(rename=(_name_=name));</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
by class _name_;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
var col:;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>run</B>;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF"><b>proc</B> <b>transpose</B>
data=result2 out=result(drop=_name_
rename=(col1-col3=chinese1-chinese3
col4-col6=maths1-maths3));</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
by class;</FONT></P>
<p ALIGN="left"><font COLOR="#0000FF">
var col1 ;</FONT></P>
<p><font COLOR="#0000FF"><b>run</B>;</FONT></P><div style="border-top: 1px solid rgb(203, 217, 217); padding-top: 20px; padding-bottom: 10px;">
<p><br><a href="http://move.blog.sina.com.cn/msnmove/index.php" target="_blank">MSN空间完美搬家到新浪博客!</a></p></div> |
|