SAS中文论坛
标题:
如何交换任意行任意列
[打印本页]
作者:
shiyiming
时间:
2011-4-14 22:06
标题:
如何交换任意行任意列
1.请问如何交换数据集中两行或者两列的顺序?
2. 有几万个观测值,想按照从小到大的顺序自动分成20档,现在用的方法是算出19个分界点的值,然后在DATA步里对每个区间都给个序号,有没有简便的方法,请教各位大牛了。
作者:
Qiong
时间:
2011-4-15 10:29
标题:
Re: 如何交换任意行任意列
1.列用retain,行写个macro?
2.proc rank
作者:
shiyiming
时间:
2011-4-16 15:01
标题:
Re: 如何交换任意行任意列
RETAIN怎么用,能不能指点下啊,谢谢。
作者:
shiyiming
时间:
2011-4-18 00:27
标题:
Re: 如何交换任意行任意列
[code:3h2ud2gv]%macro change(strtable=sashelp.class,changerow=,changecol=,outtable=result);
%let row1=%scan(&changerow,1);%let row2=%scan(&changerow,2);
%let col1=%scan(&changecol,1);%let col2=%scan(&changecol,2);
%let dsid=%sysfunc(open(&strtable));
%let nvars=%sysfunc(attrn(&dsid,nvars));
data b1 b2 b3 b4 b5;
retain
%do i=1 %to &nvars;
%if &col1 eq &i %then %sysfunc(varname(&dsid,&col2));
%else %if &col2 eq &i %then %sysfunc(varname(&dsid,&col1));
%else %sysfunc(varname(&dsid,&i));
%end;
;
set a;
%if &changerow eq %then %do;output b1;%end;
%else %do;
select;
when (_n_<&row1><&row2) output b1;
when (_n_=&row1><&row2) output b2;
when (_n_<&row1<>&row2) output b3;
when (_n_=&row1<>&row2) output b4;
otherwise output b5;
end;
%end;
run;
%let rc=%sysfunc(close(&dsid));
data &outtable;
set b1 b4 b3 b2 b5;
run;
%mend;
%change(changerow=7 4,changecol=3 5);[/code:3h2ud2gv]
欢迎光临 SAS中文论坛 (http://mysas.net/forum/)
Powered by Discuz! X3.2