楼主: tianlai888
2276 5

[原创博文] 求助:数据排序? [推广有奖]

  • 0关注
  • 0粉丝

本科生

19%

还不是VIP/贵宾

-

威望
0
论坛币
46 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
540 点
帖子
44
精华
0
在线时间
57 小时
注册时间
2009-1-9
最后登录
2012-5-18

楼主
tianlai888 发表于 2010-8-6 10:13:57 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
求助:数据排序?
    请教:有一些数据,如下:
data a;  /*原始数据,变量名为 d0 到 d9*/
input d0 d1 d2 d3 d4 d5 d6 d7 d8 d9;
cards;
1 3 0 6 9 7 4 2 8 5
10 19 2 8 6 15 3 14 18 11
9 2 10 5 11 3 4 8 1 6
;
run;

data a1;
set a;
px0=ordinal(1,of d0-d9);  /*按从小到大顺序排列d0—d9*/
px1=ordinal(2,of d0-d9);
px2=ordinal(3,of d0-d9);
px3=ordinal(4,of d0-d9);
px4=ordinal(5,of d0-d9);
px5=ordinal(6,of d0-d9);
px6=ordinal(7,of d0-d9);
px7=ordinal(8,of d0-d9);
px8=ordinal(9,of d0-d9);
px9=ordinal(10,of d0-d9);
array as1{10} d0-d9;
array as2{10} px0-px9;
array as3{10} pxwz_d0-pxwz_d9;
do i1=1 to 10;
if as1{i1}=as2{i1} then as3{i1}=i1;  /*是想得到:d0在由小到大的排序中出现在第几位,d1出现在第几位。。。*/
end;
run;

求助:这程序不对,该如何做?

谢谢!!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:ordinal array cards Input DINA

回帖推荐

pobel 发表于2楼  查看完整内容

data a; input d0 d1 d2 d3 d4 d5 d6 d7 d8 d9; array num(10) $; array d d0-d9; array pos_d pos_d0-pos_d9; do i=1 to 10; num(i)=scan(_infile_,i); end; call sortc(of num1-num10); sorted=catx(" ",of num1-num10); do i=1 to 10; j=1; do while (d(i) ne scan(sorted,j)); j+1; end; pos_d(i)=j; end; drop i j num: sorted; cards; 1 3 0 6 9 7 4 2 8 5 10 19 2 8 6 15 3 14 ...

本帖被以下文库推荐

沙发
pobel 在职认证  发表于 2010-8-6 10:50:11
data a;  
input d0 d1 d2 d3 d4 d5 d6 d7 d8 d9;
array num(10) $;
array d d0-d9;
array pos_d pos_d0-pos_d9;
do i=1 to 10;
   num(i)=scan(_infile_,i);
end;
call sortc(of num1-num10);
sorted=catx(" ",of num1-num10);
do i=1 to 10;
   j=1;
   do while (d(i) ne scan(sorted,j));
      j+1;
   end;
   pos_d(i)=j;
end;
drop i j num: sorted;
cards;
1 3 0 6 9 7 4 2 8 5
10 19 2 8 6 15 3 14 18 11
9 2 10 5 11 3 4 8 1 6
;
run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

和谐拯救危机

藤椅
hopewell 发表于 2010-8-6 11:49:47
d有重复值吗?
  1. data a;  
  2.         input d0 d1 d2 d3 d4 d5 d6 d7 d8 d9;
  3. cards;
  4. 1 3 0 6 9 7 4 2 8 5
  5. 10 19 2 8 6 15 3 14 18 11
  6. 9 2 10 5 11 3 4 8 1 6
  7. 0 3 0 6 9 7 4 0 8 5
  8. ;
  9. data b(drop=i j pos);
  10.         set a;
  11.         array d{*} d0-d9;
  12.         array pos_d{*} pos_d0-pos_d9;
  13.         do i=1 to dim(d);
  14.                 pos=1;
  15.                 do j=1 to dim(d);
  16.                         pos=ifn(d(i)>d(j),pos+1,pos);
  17.                 end;
  18.                 pos_d(i)=pos;
  19.         end;
  20. run;
复制代码

板凳
tianlai888 发表于 2010-8-6 13:54:11
谢谢指教!!!

报纸
bobguy 发表于 2010-8-7 10:17:24
pobel 发表于 2010-8-6 10:50
data a;  
input d0 d1 d2 d3 d4 d5 d6 d7 d8 d9;
array num(10) $;
array d d0-d9;
array pos_d pos_d0-pos_d9;
do i=1 to 10;
   num(i)=scan(_infile_,i);
end;
call sortc(of num1-num10);
sorted=catx(" ",of num1-num10);
do i=1 to 10;
   j=1;
   do while (d(i) ne scan(sorted,j));
      j+1;
   end;
   pos_d(i)=j;
end;
drop i j num: sorted;
cards;
1 3 0 6 9 7 4 2 8 5
10 19 2 8 6 15 3 14 18 11
9 2 10 5 11 3 4 8 1 6
;
run;
You are way overkill. see simplied one below.

data a;  
input d0 d1 d2 d3 d4 d5 d6 d7 d8 d9;
call sortn(of d0-d9);

cards;
1 3 0 6 9 7 4 2 8 5
10 19 2 8 6 15 3 14 18 11
9 2 10 5 11 3 4 8 1 6
;
run;

proc print;run;

地板
sopching 发表于 2010-8-8 09:23:04
5# bobguy 呵呵,好像曲解了LZ的意思了。 不过还真没见过这个函数,学习了

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 18:05