BookmarkSubscribeRSS Feed
luch25
Obsidian | Level 7

Hello all,

 

I'm looking for some advice on how to go about coding this. I have a dataset with longitudinal measurements of heart rate (HR) and respirations (resp). Each individual (ID) has multiple measurements. The three main things I need to do are:

  1. By unique ID, flag measurements that are taken within 5 minutes of each other (flag=1)
  2. For measurements that are NOT taken within 5 minutes of another measurement, retain the original value of HR and resp.
  3. For measurements that are taken within 5 minutes of each other, apply these rules to produce the final dataset
    1. If there are 2 measurements within the 5-minute interval, take the average of the measurements, as well as the datetime value to produce a new value
    2. If there are >2 measurements within the 5-minute interval, delete the first value, and take the average fo the remaining measurements. 

Code for an example dataset are provided below. I've also provided a description of "what's going on" for each individual below the code. 

 

data have;
	input id datetime hr resp;
	format datetime datetime22.3.;
	cards;
1 19MAR2009:13:15:00.000 90 16
1 19MAR2009:13:17:00.000 70 18
1 19MAR2009:13:18:00.000 80 17
1 19MAR2009:13.22:00.000 100 22
1 23MAR2009:10:36:00.000 83 21
2 29OCT2009:10:36:00.000 121 13
2 29OCT2009:10:38:00.000 83 14
2 08JUL2011:13:04:00.000 131 18
3 07SEP2016:14:26:59.000 50 12
3 06APR2017:13:39:00.000 76 18
3 08JUL2017:13:04:00.000 98 17
3 08JUL2017:13:08:00.000 96 18
3 24OCT2017:15:11:00.000 80 19
4 18APR2012:08:42:00.000 80 17
4 31OCT2012:10:36:00.000 96 19
4 31OCT2012:10:37:00.000 103 21
4 31OCT2012:10:38:00.000 105 25
4 31OCT2012:10:39:00.000 110 28
5 06JAN2008:05:37:00.000 98 17
5 15FEB2010:10:24:00.000 110 18
;

 

  • ID=1 has two "5 minute intervals". The first 3 measurements make up one interval (delete the one at 13:15 and take the average of 13:17 and 13:18. Then the 2nd, 3rd, and 4th measurements make up a second interval (delete the one at 13:17, and take the average of 13:18 and 13:22). 
  • ID=2 has one "5 minute interval" with 2 measurements, so take the average of these two
  • ID=3 has two measurements within a "5 minute interval"
  • ID=4 has 4 measurements within a "5 minute interval". Delete the one at 10:36 and take the average of the remaining ones
  • ID=5 does not have any measurements within a 5 minute interval
  • And as you can see, I want to retain measurements even if they are not in the 5 minute interval (flag=0)!

Applying these rules, this is what I envision the final dataset looking like:

ID Datetime (format=datetime22.3) HR2 Resp2 Flag
1 19MAR2009:13:17:30.000 75 17.5 1
1 19MAR2009:13.19:00.000 83.3 19 1
1 23MAR2009:10:36:00.000 83 21 0
2 29OCT2009:10:37:00.000 102 13.5 1
2 08JUL2011:13:04:00.000 131 18 0
3 07SEP2016:14:26:59.000 50 12 0
3 06APR2017:13:39:00.000 76 18 0
3 08JUL2017:13:06:00.000 97 17.5 1
3 24OCT2017:15:11:00.000 80 19 0
4 18APR2012:08:42:00.000 80 17 0
4 31OCT2012:10:37:30.000 103.5 23.25 1
5 06JAN2008:05:37:00.000 98 17 0
5 15FEB2010:10:24:00.000 110 18 0

 

Any advice on how to handle this would be hugely appreciated! Thank you in advance!

6 REPLIES 6
PeterClemmensen
Tourmaline | Level 20

First of all, thank you for providing usable sample data and a clear explanation 🙂

 

Secondly. When two obs are within 5 min of each other, these two obs should become 1 obs, correct?

luch25
Obsidian | Level 7

Thank you for the clarification! Yes, that is correct. If there are two observations within 5 minutes of each other, they should effectively become a single (averaged) observation in the new dataset. The datetime variable would also be averaged. 

 

The caveat is if there are >2 observations within 5 minutes of each other, the first observation is completely deleted. Then the remaining observations are averaged into a single observation. So if there are 3 measurements within 5 minutes, they become 1; if there are 4 measurements, they also become 1; etc. 

luch25
Obsidian | Level 7

@PeterClemmensen Any advice on how to approach this problem? Even just the first step of creating the 5-minute time interval flags indicating that there are multiple observations. Thank you!

PeterClemmensen
Tourmaline | Level 20

@luch25, sure just been busy. I'll post a solution during the day 🙂

luch25
Obsidian | Level 7

Oh it's no problem at all! Take your time. Just sounded like you were onto something 🙂 

luch25
Obsidian | Level 7
Oh it's no problem at all! Take your time. Just sounded like you were onto something 🙂 

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 6 replies
  • 1211 views
  • 0 likes
  • 2 in conversation