楼主: 小沐君
1405 7

[问答] 求最小值,请帮助 [推广有奖]

  • 6关注
  • 3粉丝

已卖:236份资源

博士生

5%

还不是VIP/贵宾

-

威望
0
论坛币
499 个
通用积分
30.3865
学术水平
8 点
热心指数
18 点
信用等级
8 点
经验
44321 点
帖子
191
精华
0
在线时间
192 小时
注册时间
2016-1-10
最后登录
2023-11-26

楼主
小沐君 发表于 2019-4-24 14:50:33 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
想求这样的最小值 (lowest value previously recorded),比如,
当前是在001这个人的第五条记录 (Day 5),要求的是前四条(Day 1,day2,day3,day4) value的最小值;
如果是在这个人的第六条,就是求前五条的最小值。

请问怎么实现??


我简单dummy了点数据,用来测试

data raw;
        subject='001';visit='Day 1';date='2019-02-13';value=0;output;
        subject='001';visit='Day 2';date='2019-02-14';value=1;output;
        subject='001';visit='Day 3';date='2019-02-15';value=.;output;
        subject='001';visit='Day 4';date='2019-02-16';value=12;output;
        subject='001';visit='Day 5';date='2019-02-17';value=.;output;
        subject='001';visit='Unscheduled';date='2019-02-18';value=2;output;
        subject='001';visit='Day 3';date='2019-02-15';value=5;output;
        subject='001';visit='Day 4';date='2019-02-18';value=12;output;
run;
proc sort data= raw ;
        by subject date;
run;


求大神们指点,谢谢!

二维码

扫码加我 拉你入群

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

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

关键词:最小值 第六条

沙发
8112mmw 发表于 2019-4-25 07:53:22
这个是否要先建一个变量,来确定不同的人的观测次数,然后再选出符合要求的数据?

藤椅
孤单的我们 发表于 2019-4-25 09:33:36
  1. data raw;
  2.         subject='001';visit='Day 1';date='2019-02-13';value=10;output;
  3.         subject='001';visit='Day 2';date='2019-02-14';value=9;output;
  4.         subject='001';visit='Day 3';date='2019-02-15';value=.;output;
  5.         subject='001';visit='Day 4';date='2019-02-16';value=12;output;
  6.         subject='001';visit='Day 5';date='2019-02-17';value=.;output;
  7.         subject='001';visit='Unscheduled';date='2019-02-18';value=2;output;
  8.         subject='001';visit='Day 3';date='2019-02-15';value=5;output;
  9.         subject='001';visit='Day 4';date='2019-02-18';value=12;output;
  10. run;
  11. proc sort data= raw ;
  12.         by subject date;
  13. run;

  14. data want;
  15.         set raw;
  16.         by subject;
  17.         retain min .;
  18.         if first.subject then min=.;
  19.         min=min(min,value);
  20.         result=lag(min);
  21. run;
复制代码
已有 2 人评分论坛币 学术水平 热心指数 收起 理由
whymath + 5 精彩帖子
小沐君 + 1 + 1 观点有启发

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1   查看全部评分

板凳
小沐君 发表于 2019-4-25 18:09:07
8112mmw 发表于 2019-4-25 07:53
这个是否要先建一个变量,来确定不同的人的观测次数,然后再选出符合要求的数据?
我一开始也是想这么求,先求出每个人的总观测数N,然后用lag函数,lag1,lag2,..., lag(n-1),
后来卡在了怎么把lagn 套在循环里,

就比如,
array a  a1-a40;
do i= 1 to (N-1);
a(i)=lagi(value);  /*这里面lagn 的n 应该是下角标吧*/
end;

报纸
小沐君 发表于 2019-4-25 18:10:12
孤单的我们 发表于 2019-4-25 09:33
好巧妙,谢谢大神!!!

地板
小沐君 发表于 2019-4-25 18:19:35
孤单的我们 发表于 2019-4-25 09:33
大神啊,

话说怎么把lagn 套在循环里呀?

就比如,
N 是每人的总观测数,

array a  a1-a40; (个数先往多了写)
do i= 1 to (N-1);
a(i)=lagi (value);  /*这里面lagi 就是 lagn 的n (应该是下角标吧)*/
end;

这种的会报错,不知道怎么处理?

7
孤单的我们 发表于 2019-4-28 09:16:00
小沐君 发表于 2019-4-25 18:19
大神啊,

话说怎么把lagn 套在循环里呀?
lagN不能通过do loop来控制,lagi(value)会被SAS认为是数据lagi。
可以用宏循环%do……%end来实现。

8
小沐君 发表于 2019-4-29 18:42:54
孤单的我们 发表于 2019-4-28 09:16
lagN不能通过do loop来控制,lagi(value)会被SAS认为是数据lagi。
可以用宏循环%do……%end来实现。
谢谢大神指点!!

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

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