# Separate XY Pair into Weekday and Weekend Waves

// Demo showing how to split XY waves into weekday and weekend waves

//  DayOfWeek(dt)
//  Returns day of week as a number from 1 (Sunday) to 7 (Saturday)
Function DayOfWeek(dt)
Variable dt                 // Input date/time value

String shortDateStr = Secs2Date(dt, -1)     // <day-of-month>/<month>/<year> (<day of week>)

Variable dayOfMonth, month, year, dayOfWeek
sscanf shortDateStr, "%d/%d/%d (%d)", dayOfMonth, month, year, dayOfWeek

return dayOfWeek
End

// IsWeekday(dt)
// Returns 0 for Saturday and Sunday, 1 for the rest of the week
Function IsWeekday(dt)
Variable dt                 // Input date/time value

Variable day = DayOfWeek(dt)
if (day == 1)
return 0                // Sunday
endif
if (day == 7)
return 0                // Saturday
endif
return 1
End

Function Demo() // Demonstrates separating an XY pair into weekday and weekend data
// Make XY pair with date/time values for X
Make/D/O/N=1000 xData = Date2Secs(2014, 01, 01) + p*60*60       // Step by one hour
SetScale d, 0, 0, "dat", xData
Make/D/O/N=1000 yData = p

// Split into weekday and weekend data
Extract xData, xDataWeekday, IsWeekday(xData)
SetScale d, 0, 0, "dat", xDataWeekday               // Extract does not preserve units
Extract yData, yDataWeekday, IsWeekday(xData)
Extract xData, xDataWeekend, !IsWeekday(xData)
SetScale d, 0, 0, "dat", xDataWeekend               // Extract does not preserve units
Extract yData, yDataWeekend, !IsWeekday(xData)

Display /W=(30,53,816,609) yData vs xData
AppendToGraph yDataWeekday vs xDataWeekday
ModifyGraph rgb(yDataWeekday)=(0, 0, 65535), offset(yDataWeekday)={0,100}
AppendToGraph yDataWeekend vs xDataWeekend
ModifyGraph rgb(yDataWeekend)=(0, 65535, 0), offset(yDataWeekend)={0,200}
ModifyGraph mode=2, lsize=3
Legend/C/N=text0/A=LT
End

Hello hrodstein,

I am trying to incorporate the my date/time wave that includes all time stamps into your code, but the execution doesn't work on my part. How do I make this code automatically scan through my date/time wave and create an output to a new wave containing the 0's,1's? There must be a simple modification that I may have missed on my part. Thank you.

Forum

Support

Gallery