我正在尝试将包含一些日期列/字段的数据导入SAS . 数据采用JSON格式,因此需要在导入之前进行转换 . 我使用SAS libname JSON .
但是当我转换/导入数据时,SAS不会将日期解释为正确的日期,并允许我操纵具有日期约束的数据等等 . 相反,SAS将日期导入格式= $,无论是什么 . 但数据显示在导入的数据中 . SAS无错误地导入数据,但数据中除“date_fi”之外的任何其他日期字段都未正确格式化为日期 .
我使用以下脚本
filename resp“C:\ Temp \ transaktioner_2017-07.json”lrecl = 1000000000; filename jmap“C:\ Temp \ transaktioner.map”;文件名头“c:\ temp \ header.txt”; options metaserver =“DOMAIN”metaport = 8561 metarepository =“Foundation”metauser =“USER”metapass ='CENSORED'; libname CLIENT sasiola tag = SOMETAG port = 10011 host =“DOMAIN”signer =“https:// CENSORED”; proc http HEADEROUT = head url ='http:// VALID_PATH / acubiz_sas / _design / view / _view / bymonth?key =“2017-07”'method =“GET”CT =“application / json”out = resp;跑; libname space JSON fileref = resp map = jmap; * automap = create; LIBNAME SASDATA BASE“D:\ SASData”; * outencoding ='UTF-8';数据SASDATA.Transaktioner;设置space.Rows_value;跑;数据无效;如果存在(“Acubiz.EMS_TRANSAKTIONER”,“DATA”)则rc = dosubl(“proc sql noprint; drop table Acubiz.EMS_TRANSAKTIONER; quit;”);跑;数据Acubiz.EMS_TRANSAKTIONER;设置sasdata.transaktioner;跑; proc metalib; omr(library =“/ Shared Data / SAS Visual Analytics / Autoload / AcubizEMSAutoload / Acubiz_EMS”repname =“Foundation”); folder =“/ Shared Data / SAS Visual Analytics / Autoload / AcubizEMSAutoload”;选择(“EMS_TRANSAKTIONER”);跑;放弃; libname客户端清除; libname空间清晰;
对于此转换,我使用以下称为“transaktioner.map”的JSON map.file .
字段 date_fi
以正确的日期格式导入,我可以在SAS Visual Analytics中将其作为日期格式进行操作,但 confirmeddate_fi
不会 .
这个文件最重要的部分就在这里 .
{
"NAME": "date_fi",
"TYPE": "NUMERIC",
"INFORMAT": [ "e8601dt19", 19, 0 ],
"FORMAT": ["DATETIME", 20],
"PATH": "/root/rows/value/date_fi",
"CURRENT_LENGTH": 20
},
{
"NAME": "confirmeddate_fi",
"TYPE": "NUMERIC",
"INFORMAT": [ "e8601dt19", 19, 0 ],
"FORMAT": ["DATETIME", 20],
"PATH": "/root/rows/value/confirmeddate_fi",
"CURRENT_LENGTH": 20
},
你们中的任何人都知道如何导入数据并解释日期字段 .
我一直在搞乱JSON map文件中的不同线人来解决这个问题,并设法到达我可以无错误地导入数据的地方,但SAS并没有解释日期字段 .
这里用一些例子(取自导入的数据)解释实际字段:
Reference that works
date_fi: "2017-07-14T00:00:00" (Apparantly never timestamped but use T00:00:00 - checked 9 instances)
Should work
invoicedate_fi: "2017-08-01T00:00:00" (Apparantly never timestamped but use T00:00:00 - checked 9 instances)
invoicedate_fi: "2017-07-19T00:00:00"
invoicedate_fi: "2017-07-17T00:00:00"
arrivaldate_fi: "2017-08-13T00:00:00" (Apparantly never timestamped but use T00:00:00 - checked 9 instances)
departuredate_fi: "2017-08-09T00:00:00" (Apparantly never timestamped but use T00:00:00 - checked 9 instances)
Do not work as numeric - even though they are specified as dates in map-file (for use with SAS JSON Libname)
markedreadydate_fi: "2017-08-02T11:41:56" (This field is often but not always timestamped)
markedreadydate_fi: "2017-07-31T15:08:03"
markedreadydate_fi: "2017-07-19T00:00:00"
confirmeddate_fi: "2017-07-21T00:00:00" (This field is often but not always timestamped)
confirmeddate_fi: "2017-08-06T20:11:26"
confirmeddate_fi: "2017-07-14T18:38:41"
confirmeddatefinance_fi: "2017-07-31T15:54:10" (This field is often but not always timestamped)
confirmeddatefinance_fi: "2017-08-17T10:33:32"
confirmeddatefinance_fi: "2017-07-26T08:21:34"
markedreadydate_fi: "2017-07-19T00:00:00" (This field is often but not always timestamped)
有没有人有关于这个问题的相关信息,因为我在我的智慧结束?关于这个日期问题已经耗尽了SAS技术支持 .
PS:作为概念证明,我们正在导入大约110,000行 . 导入完成没有任何错误 .
可以找到一个很好的PDF解释SAS中不同的ISO格式here
1 回答
显然,解决方案是开始将日期列导入为CHARACTER而不是数字 . 因此,在SAS代码中转换为日期格式,如下所示:
然后,我将删除NUMERIC类型的所有细节,以便在 Map 文件中导入日期字段 . 这样,JSON libname不会解释日期格式 . SAS确实如此 .
即 . 对于alle date-fields,必须将映射文件规范更改回类似的内容 .