在SAS中导入单行json文件

时间:2015-07-31 10:51:23

标签: json sas

我有以下json格式的数据:

{"metadata1":"val1","metadata2":"val2","data_rows":[{"var1":1,"var2":2,"var3":3},{"var1":4,"var2":5,"var3":6}]}

在开始时有一些元数据变量,它们只出现一次,然后是多个数据记录,都在同一行上。如何将其导入SAS数据集?

1 个答案:

答案 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已达到分隔符。
  • 在infile语句中设置:会从字符数据值中删除双引号,并防止在字符变量包含分隔符时出现任何问题。
  • 双尾dsd告诉SAS继续使用相同的逻辑从同一行读取更多记录,直到它到达行尾。
  • 使用单独的输入语句将元数据变量作为特殊情况处理。如果需要,它们可以很容易地转移到单独的文件中的单行。
  • @需要大于或等于文件的长度才能使用此方法。
  • 如果您的文件非常大,设置lrecl应该有助于减少内存使用量,方法是阻止SAS尝试缓冲多个输入行。