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