So I'm working on writing a proper suite of automated tests for a library of statistical analysis macros used for analysis of medical trials. And updating the existing macros to follow better practices, such as handling invalid input and managing edge cases. As I'm working with medical data, this needs to follow SDTM which mandates extended ISO8601 date format, with a few additional limitations as specified by SDTMIG. This means SAS numeric dates are not part of the work, other than one of my macros that I will be testing shortly that converts from numeric to ISO8601 format. The existing macro allowed for truncation but not omitted sections replaced by -, both of which are allowed by ISO8601. In addition to those human readable variants SAS like to store ISO8601 informatted data in an encoded fashion using a mix of decimal and hex. Definitely both the human readable options are valid input, they both follow the specification. As SAS claims that its encoded format is extended ISO8601, I believe I should consider this to be valid input because SAS considers it to match that style and it maps 1 to 1 with valid extended ISO8601 format. In addition, there is a fairly chaotic system for converting data in SDTM that is out of my control so it is plausible that data could reach this macro in that encoded format, given it is how SAS claims ISO8601 should be handled, for very odd reasons. For this macro at least, it is definitely easier to find the correct output in the human readable form, so I want to be able to check if it is in the encoded format so I can convert it before applying the macros logic. Currently planning on moving valid ISO8601 date verification to a new macro but that will also need to handle the encoded informat, possibly I can do that with a clean regex.
... View more