楼主: fondly明月夜
1918 7

[问答] 如何计算a列的每一个数值分别与b列的所有数值相加,取前3个最大的数之和作为新列 [推广有奖]

  • 0关注
  • 0粉丝

高中生

77%

还不是VIP/贵宾

-

威望
0
论坛币
7 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
416 点
帖子
6
精华
0
在线时间
67 小时
注册时间
2017-10-13
最后登录
2022-2-12

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
【求助】如何计算a列的每一个数值分别与b列的所有数值相加,取前3个最大的数之和作为新列
数据如下:
data test;
input a b;
cards;
3 2
4 3
1 4
2 5
6 7
;
run;
希望得到:
abc

3

7

27

4

3

30

1

4

21

2

6

24

6

5

36

c的第一个值为a的第一个值分别加上b的每一个值,然后取最大的三个值累加起来得到的。想问一下sas里这样的代码怎么写
二维码

扫码加我 拉你入群

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

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

关键词:最大的 cards Input card Data

沙发
fondly明月夜 学生认证  发表于 2018-9-3 17:34:22 |只看作者 |坛友微信交流群
觉得这是一个二重循环的问题,如果简单求和的话思路如下:
do i=1 to 7;
    do j=1 to 7;
        ci=ai+bj
    end;
end;
不知道sas里变量的行数怎么表达, ci=ai+bj这种写法在sas里无法实现。恳请各位大佬指教。

使用道具

藤椅
cxy199088 学生认证  发表于 2018-9-3 21:12:59 来自手机 |只看作者 |坛友微信交流群
这问题用Matlab感觉简单不少。导进去算就好啦。

使用道具

板凳
malloy666 发表于 2018-9-4 10:42:14 |只看作者 |坛友微信交流群
将b列转成行就行了

使用道具

报纸
woodolt 发表于 2018-9-5 23:20:32 |只看作者 |坛友微信交流群

aaaa

aaaaaa

使用道具

地板
woodolt 发表于 2018-9-16 11:38:48 |只看作者 |坛友微信交流群
data test;
input a b;
cards;
3 7
4 3
1 4
2 6
6 5
;
run;

proc sort data=test out=test1 ;
by descending b ;
run;

data test2;set test1;
if _n_<=3 ;
run;

proc sql;
select sum(b) into :bb from test2 ;
quit;

data test3;
set test;
c=3*a+&bb.;
run;
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
fondly明月夜 + 1 + 1 + 1 热心帮助其他会员
admin_kefu + 20 + 2 + 2 热心帮助其他会员

总评分: 论坛币 + 20  学术水平 + 3  热心指数 + 3  信用等级 + 1   查看全部评分

使用道具

7
fondly明月夜 学生认证  发表于 2018-9-18 19:05:48 |只看作者 |坛友微信交流群
woodolt 发表于 2018-9-16 11:38
data test;
input a b;
cards;
十分感谢,但可能是我转化问题时不够确切,转化后的问题是可以通过排序的方法解决。但实际问题是a、b两个变量分别是不同的经纬度坐标,需要计算a中每一个坐标到b中每一个坐标的距离,然后取最近的三个距离之和,作为变量c的值,这就无法使用排序,然后sas的双重循环我不知道怎么表达。不过还是谢谢你回答我的问题。

使用道具

8
woodolt 发表于 2018-9-23 00:19:52 |只看作者 |坛友微信交流群
如果你是坐标值,那么两个variable表示一个位置,你需要的是一个笛卡尔积,用sql实现,参见如下程序

data test;
input a1 a2  b1 b2;
cards;
3 1 7 6
4 2 3 7
1 3 4 8
2 4 6 9
6 5 5 5
;
data test1;set test;run;
proc sql;create table test2 as select a.a1,a.a2, b.b1,b.b2 from test as a cross join test1 as b;quit;
data test3;set test2;c0=sqrt((a1-b1)**2+ (a2-b2)**2); proc sort;by a1 a2  c0;
data test4;
  retain c;
  set test3;
  by a1 a2 c0;
  if first.a2 then do; ord=0;c=c0;end;
  else do; ord+1; c=c+c0; end;
  if ord=3;
  drop c0 ord;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
fondly明月夜 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 21:57