如何在SAS Enterprise Guide的PROC SQL中提取字符列特定值?
在SAS PROC SQL中提取JSON字符串里的Top值创建新列
方法一:使用SAS内置JSON函数(推荐,SAS 9.4及以上版本支持)
由于TYPE列存储的是标准JSON格式字符串,可直接用SAS的JSON提取函数获取Top对应的值,再转换为数值型:
PROC SQL; CREATE TABLE WANT AS SELECT ID, TYPE, /* 提取Top对应的字符值并转为数值 */ INPUT(JSON_EXTRACT(TYPE, '$.Top'), BEST32.) AS COL1 FROM YOUR_TABLE_NAME; /* 替换为你的源表名 */ QUIT;
JSON_EXTRACT(TYPE, '$.Top'):从JSON字符串中提取Top键对应的字符值INPUT(..., BEST32.):将提取到的字符型数值转换为SAS数值型,适配整数、小数等格式
方法二:字符串处理(兼容低版本SAS)
如果你的SAS版本不支持JSON函数,可通过字符串定位、截取的方式实现:
PROC SQL; CREATE TABLE WANT AS SELECT ID, TYPE, INPUT( /* 截取"Top:"后的内容,再以逗号或大括号为分隔取第一部分 */ SCAN(SUBSTR(TYPE, INDEX(TYPE, '"Top":') + 6), 1, ',}'), BEST32. ) AS COL1 FROM YOUR_TABLE_NAME; /* 替换为你的源表名 */ QUIT;
INDEX(TYPE, '"Top":'):定位"Top":在字符串中的起始位置SUBSTR(..., +6):截取"Top:"之后的部分("Top:"共6个字符)SCAN(..., 1, ',}'):以逗号或右大括号为分隔符,取第一部分(即Top对应的数值字符串)INPUT(..., BEST32.):转换为数值型
注意事项
- 确保
TYPE列的JSON格式规范,Top键名始终以双引号包裹且大小写与代码中的"Top"一致 - 如果存在
Top键缺失的情况,可添加CASE语句处理空值,例如:CASE WHEN INDEX(TYPE, '"Top":') > 0 THEN INPUT(..., BEST32.) ELSE . END AS COL1
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

