|
地板

楼主 |
发表于 2011-4-18 00:27:54
|
只看该作者
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] |
|