楼主: gaotao0727
4595 12

[问答] 前缀相同的前N个变量求最大值,求助求助 [推广有奖]

  • 1关注
  • 10粉丝

已卖:67份资源

副教授

79%

还不是VIP/贵宾

-

威望
0
论坛币
545 个
通用积分
11.1290
学术水平
18 点
热心指数
18 点
信用等级
12 点
经验
27715 点
帖子
873
精华
0
在线时间
855 小时
注册时间
2011-8-8
最后登录
2025-9-11

楼主
gaotao0727 发表于 2013-7-30 20:04:12 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
代码如下:
  1. data b;
  2.   input x_1 x_2 x_3 x_4 x_5 n;
  3.   cards;
  4. 2 4 . 7 9 3
  5. . 4 6 1 6 4
  6. 9 3 5 30 1 5
  7. 9 5 0 22 4 2
  8. ;
  9. run;
复制代码
需求:前缀都是x的5个变量,求每条记录的前n个相同前缀变量的最大值,例如当n=3时,则求x_1,x_2, x_3中的最大值给变量Max,当n=4时,则求x_1,x_2, x_3,x_4中的最大值给变量Max。
哪位大师可以指点一下,有点急,非常感谢!


二维码

扫码加我 拉你入群

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

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

关键词:求助求助 最大值 cards Input Data 最大值 记录

本帖被以下文库推荐

  • · sas|主题: 59, 订阅: 14
衣带渐宽终不悔,为伊消得人憔悴~~

沙发
yongyitian 发表于 2013-7-30 21:47:14
  1. data b;
  2.   input x_1 x_2 x_3 x_4 x_5 n;
  3.   cards;
  4. 2 4 . 7 9 3
  5. . 4 6 1 6 4
  6. 9 3 5 30 1 5
  7. 9 5 0 22 4 2
  8. ;
  9. run;

  10. data c;
  11.     set b;
  12.      array x{5} x_1 - x_5;
  13.      max = 0;
  14.      do i = 1 to n;
  15.       if x[i]>max then max= x[i];
  16.     end;
  17.     drop i;
  18. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 浓缩

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

藤椅
你的太阳 发表于 2013-7-30 21:50:03

data b;
  input x_1 x_2 x_3 x_4 x_5 n;
  datalines;
2 4 . 7 9 3
. 4 6 1 6 4
9 3 5 30 1 5
9 5 0 22 4 2
;
run;
proc sql noprint;
select max(n) into :maxn
from b;
quit;
%macro test;
data c;
set b;
if n = 1 then maxvar = x_1;
%do i = 2 %to &maxn;
    if n = &i then maxvar=max(of x_1-x_&i);
   %end;   
run;
%mend;
options mprint;
%test;
proc print;run;

板凳
6皮皮9 发表于 2013-7-30 21:58:52
搞定了,最后那个result的表就是你要的结果,自己根据你的数据变量数来调吧

proc iml;
use b;
read all var _num_ into b;
create max_b var{max};
do i=1 to nrow(b);
n=b[i,6];
row=b[i,1:n];
max=max(row);
edit max_b;
append from max;
end;
quit;
data result;
merge b max_b;
run;

报纸
6皮皮9 发表于 2013-7-30 22:20:35
yongyitian 发表于 2013-7-30 21:47
哇塞,你这个方法好巧妙啊!鼓掌!

地板
boe 发表于 2013-7-31 03:08:28
  1. 学习了
复制代码
Gorgeous girl , I love !

7
gaotao0727 发表于 2013-7-31 09:01:31
yongyitian 发表于 2013-7-30 21:47
太好了,数组这么好用,真得好好学习一下,非常感谢~~
衣带渐宽终不悔,为伊消得人憔悴~~

8
gaotao0727 发表于 2013-7-31 09:17:58
你的太阳 发表于 2013-7-30 21:50
data b;
  input x_1 x_2 x_3 x_4 x_5 n;
  datalines;
学习了,也是一种思路,谢谢~~没用数组做出来很佩服你,我就是没有想出来这个办法,哎 ~~
衣带渐宽终不悔,为伊消得人憔悴~~

9
gaotao0727 发表于 2013-7-31 09:24:08
6皮皮9 发表于 2013-7-30 21:58
搞定了,最后那个result的表就是你要的结果,自己根据你的数据变量数来调吧

proc iml;
班啊,咱俩的SAS水平不是一个等级的啊,连IML都用得这么熟练了,我得好好学一下你的代码了,很高深啊~谢谢~~但有个问题,do在我这里为什么是红字体,执行没问题。
衣带渐宽终不悔,为伊消得人憔悴~~

10
wwang111 发表于 2013-7-31 09:37:37
yongyitian 发表于 2013-7-30 21:47
您的程序里可以把max=0 写成max=. , 如果x_1 - x_5都是空值的话,max会返回0值,个人意见呵呵。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
yongyitian + 1 + 1 + 1 我很赞同

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

只有一个罗纳尔多

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

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