Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Classfying time into categories

    Hi

    I am trying to classify the time variable into 4 categories: Morning (6:00 AM - 11:59 AM), afternoon (12:00 PM - 5:59 PM), evening (6:00 PM - 11:59 PM), early morning (12: 00 AM - 11:59 AM). I used the codes below but keep getting errors
    gen time_category = ""

    gen hour = clock(Time, "hmt")

    replace time_category = "Early Morning" if inrange(hour, 0, 5) & substr(Time, -2) == "AM"
    replace time_category = "Morning" if inrange(hour, 6, 11) & substr(Time, -2) == "AM"
    replace time_category = "Afternoon" if inrange(hour, 0, 5) & substr(Time, -2) == "PM"
    replace time_category = "Evening" if inrange(hour, 6, 11) & substr(Time, -2) == "PM"


    Please, i need help.


    input str4 Year str8 Month str11 Time str17 Dateofcrash
    "2017" "January" "12:03:00 PM" " 7/10/2018 00:00"
    "2017" "february" "10:05:00 AM" " 7/16/2017 00:00"
    "2017" "march" "10:06:00 PM" "11/10/2019 00:00"
    "2018" "april" "10:13:00 PM" " 8/25/2021 00:00"
    "2018" "December" "10:17:00 PM" " 7/4/2021 00:00"
    "2018" "November" "10:24:00 AM" " 9/16/2020 00:00"
    "2018" "January" "10:25:00 AM" "12/17/2021 00:00"
    "2019" "february" "10:41:00 AM" " 9/8/2021 00:00"
    "2019" "march" "10:44:00 AM" " 5/15/2020 00:00"
    "2019" "april" "10:45:00 AM" " 5/26/2021 00:00"
    "2019" "December" "10:46:59 PM" " 7/31/2021 00:00"
    "2020" "November" "10:52:00 PM" " 7/13/2017 00:00"
    "2020" "January" "10:54:00 AM" " 8/10/2021 00:00"
    "2020" "february" "11:00:00 PM" " 9/3/2021 00:00"
    "2017" "march" "11:02:00 PM" " 5/8/2020 00:00"
    "2017" "april" "11:10:00 AM" " 4/14/2021 00:00"
    "2017" "December" "11:10:59 AM" " 6/27/2018 00:00"
    "2017" "November" "11:15:00 AM" " 7/10/2021 00:00"
    "2018" "January" "11:17:00 AM" " 7/11/2021 00:00"
    "2018" "february" "11:22:00 PM" " 9/4/2019 00:00"
    "2018" "march" "11:23:00 AM" "11/26/2021 00:00"
    "2018" "april" "11:23:00 PM" "10/31/2019 00:00"
    "2019" "December" "11:26:00 PM" " 8/3/2021 00:00"
    "2019" "November" "11:29:00 AM" " 5/13/2021 00:00"
    "2019" "January" "11:30:00 AM" " 8/9/2021 00:00"
    "2019" "february" "11:33:00 AM" " 5/30/2021 00:00"
    "2020" "march" "11:35:00 PM" " 5/29/2021 00:00"

  • #2
    Several problems here. One is that Hours won't be an integer between 0 and 11. Its units are milliseconds. Another is that you need a double to hold date-times reliably.

    Code:
    * Example generated by -dataex-. For more info, type help dataex
    clear
    input str11 Time
    "12:03:00 PM"
    "10:05:00 AM"
    "10:06:00 PM"
    "10:13:00 PM"
    "10:17:00 PM"
    "10:24:00 AM"
    "10:25:00 AM"
    "10:41:00 AM"
    "10:44:00 AM"
    "10:45:00 AM"
    "10:46:59 PM"
    "10:52:00 PM"
    "10:54:00 AM"
    "11:00:00 PM"
    "11:02:00 PM"
    "11:10:00 AM"
    "11:10:59 AM"
    "11:15:00 AM"
    "11:17:00 AM"
    "11:22:00 PM"
    "11:23:00 AM"
    "11:23:00 PM"
    "11:26:00 PM"
    "11:29:00 AM"
    "11:30:00 AM"
    "11:33:00 AM"
    "11:35:00 PM"
    end
    
    gen double Hours = clock(Time,  "hms") 
    
    format Hours %tcHH:MM:SS 
    
    sort Hours 
    
    * how many ms in 6 hours? 
    gen wanted = ceil(Hours/(6 * 60 * 60000)) 
    
    list , sepby(wanted)
    
         +---------------------------------+
         |        Time      Hours   wanted |
         |---------------------------------|
      1. | 10:05:00 AM   10:05:00        2 |
      2. | 10:24:00 AM   10:24:00        2 |
      3. | 10:25:00 AM   10:25:00        2 |
      4. | 10:41:00 AM   10:41:00        2 |
      5. | 10:44:00 AM   10:44:00        2 |
      6. | 10:45:00 AM   10:45:00        2 |
      7. | 10:54:00 AM   10:54:00        2 |
      8. | 11:10:00 AM   11:10:00        2 |
      9. | 11:10:59 AM   11:10:59        2 |
     10. | 11:15:00 AM   11:15:00        2 |
     11. | 11:17:00 AM   11:17:00        2 |
     12. | 11:23:00 AM   11:23:00        2 |
     13. | 11:29:00 AM   11:29:00        2 |
     14. | 11:30:00 AM   11:30:00        2 |
     15. | 11:33:00 AM   11:33:00        2 |
         |---------------------------------|
     16. | 12:03:00 PM   12:03:00        3 |
         |---------------------------------|
     17. | 10:06:00 PM   22:06:00        4 |
     18. | 10:13:00 PM   22:13:00        4 |
     19. | 10:17:00 PM   22:17:00        4 |
     20. | 10:46:59 PM   22:46:59        4 |
     21. | 10:52:00 PM   22:52:00        4 |
     22. | 11:00:00 PM   23:00:00        4 |
     23. | 11:02:00 PM   23:02:00        4 |
     24. | 11:22:00 PM   23:22:00        4 |
     25. | 11:23:00 PM   23:23:00        4 |
     26. | 11:26:00 PM   23:26:00        4 |
     27. | 11:35:00 PM   23:35:00        4 |
         +---------------------------------+
    To jump the other way at boundaries, use 1 + floor() rather than ceil().

    Last edited by Nick Cox; 04 Sep 2023, 14:56.

    Comment

    Working...
    X