如何在SAS中从单行长文本变量生成多个目标变量
在SAS中从JSON格式文本提取指定变量的解决方案
针对你提供的JSON格式单行长文本,这里提供三种可行的SAS实现方案,按需选择:
方法一:使用JSONVALUE函数(SAS 9.4M5及以上版本)
利用SAS内置的JSONVALUE函数直接提取指定键的值,代码简洁高效:
/* 假设原始数据集为raw_data,存储目标文本的变量名为json_text */ data extracted_vars; set raw_data; /* 提取screenW并转为数值型变量 */ Device_width = input(jsonvalue(json_text, 'screenW'), best12.); /* 提取screenH并转为数值型变量 */ Device_height = input(jsonvalue(json_text, 'screenH'), best12.); /* 提取touch的布尔值(保留字符型) */ Touch = jsonvalue(json_text, 'touch'); /* 提取OS的字符串值 */ Device_OS = jsonvalue(json_text, 'OS'); /* 仅保留需要的变量 */ keep Device_width Device_height Touch Device_OS; run;
方法二:使用LIBNAME JSON引擎(SAS 9.4及以上版本)
适合批量处理JSON数据,SAS会自动解析结构生成数据集:
/* 将JSON文本写入临时文件 */ filename temp_json temp; data _null_; set raw_data; file temp_json; put json_text; run; /* 关联JSON引擎到临时文件 */ libname jsonlib json fileref=temp_json; /* 读取解析后的数据并重命名变量 */ data extracted_vars; set jsonlib.root; Device_width = screenW; Device_height = screenH; Touch = touch; Device_OS = OS; keep Device_width Device_height Touch Device_OS; run; /* 清理临时资源 */ libname jsonlib clear; filename temp_json clear;
方法三:正则表达式提取(兼容低版本SAS)
如果你的SAS版本不支持JSON工具,可通过PRX系列正则函数匹配提取:
data extracted_vars; set raw_data; /* 提取screenW的数值 */ prxparse('/"screenW":(\d+)/'); if prxmatch(_regex_, json_text) then Device_width = input(prxposn(_regex_, 1, json_text), best12.); /* 提取screenH的数值 */ prxparse('/"screenH":(\d+)/'); if prxmatch(_regex_, json_text) then Device_height = input(prxposn(_regex_, 1, json_text), best12.); /* 提取touch的布尔值 */ prxparse('/"touch":(true|false)/'); if prxmatch(_regex_, json_text) then Touch = prxposn(_regex_, 1, json_text); /* 提取OS的字符串 */ prxparse('/"OS":"([^"]+)"/'); if prxmatch(_regex_, json_text) then Device_OS = prxposn(_regex_, 1, json_text); keep Device_width Device_height Touch Device_OS; run;
内容的提问来源于stack exchange,提问作者Chirag Vyas
相关产品推荐
相关产品推荐

