SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1775|回复: 3
打印 上一主题 下一主题

如何交换任意行任意列

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-4-14 22:06:08 | 只看该作者

如何交换任意行任意列

1.请问如何交换数据集中两行或者两列的顺序?
2. 有几万个观测值,想按照从小到大的顺序自动分成20档,现在用的方法是算出19个分界点的值,然后在DATA步里对每个区间都给个序号,有没有简便的方法,请教各位大牛了。
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
沙发
发表于 2011-4-15 10:29:24 | 只看该作者

Re: 如何交换任意行任意列

1.列用retain,行写个macro?
2.proc rank
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-4-16 15:01:31 | 只看该作者

Re: 如何交换任意行任意列

RETAIN怎么用,能不能指点下啊,谢谢。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 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]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-10 14:42 , Processed in 0.131397 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表