我有以下json格式的数据:
{"metadata1":"val1","metadata2":"val2","data_rows":[{"var1":1,"var2":2,"var3":3},{"var1":4,"var2":5,"var3":6}]}
在开始时有一些元数据变量,它们只出现一次,然后是多个数据记录,都在同一行上。如何将其导入SAS数据集?
答案 0 :(得分:3)
BackgroundWorker
注意:
/*Create json file containing sample data*/
filename json "%sysfunc(pathname(work))\json.txt";
data _null_;
file json;
put '{"metadata1":"val1,","metadata2":"val2}","data_rows":[{"var1":1,"var2":2,"var3":3},{"var1":4,"var2":5,"var3":6}]}';
run;
/*Data step for importing the json file*/
data want;
infile json dsd dlm='},' lrecl = 1000000 n=1;
retain metadata1 metadata2;
if _n_ = 1 then input @'metadata1":' metadata1 :$8. @'metadata2":' metadata2 :$8. @;
input @'var1":' var1 :8. @'var2":' var2 :8. @'var3":' var3 :8. @@;
run;
逻辑设置SAS开始读取每个变量的要点。 @'string'
和,
设置为分隔符,并在输入语句中使用}
格式修饰符告诉SAS继续读取指定起始点的字符,直到它读取最大请求的数字或a已达到分隔符。:
会从字符数据值中删除双引号,并防止在字符变量包含分隔符时出现任何问题。dsd
告诉SAS继续使用相同的逻辑从同一行读取更多记录,直到它到达行尾。@
需要大于或等于文件的长度才能使用此方法。lrecl
应该有助于减少内存使用量,方法是阻止SAS尝试缓冲多个输入行。