如何在SAS中将单条观测(含两个变量)拆分为多条观测?
SAS数据集单条观测拆分方法
针对你需要将含X_Number、Y_Number的单条观测拆分为多条(保留Name、Date,合并为Number字段)的需求,提供两种常用实现方法:
方法一:DATA步手动输出
直接遍历原数据集,对非空的X_Number、Y_Number分别生成新观测并输出:
data want; set have; /* have为原数据集名称 */ /* 处理X_Number,非空则输出 */ if not missing(X_Number) then do; Number = X_Number; output; end; /* 处理Y_Number,非空则输出 */ if not missing(Y_Number) then do; Number = Y_Number; output; end; /* 仅保留需要的变量 */ keep Name Date Number; run;
说明
- 用
not missing()判断字段是否为空,避免生成空Number的观测 - 每次
output会生成一条新观测,实现单条拆分为多条的效果
方法二:PROC TRANSPOSE转置
利用转置过程将列转为行,自动拆分观测:
proc transpose data=have out=want(rename=(col1=Number) drop=_name_) where=(not missing(col1)); by Name Date; /* 按Name和Date分组,保证同一组的转置结果对应原观测 */ var X_Number Y_Number; /* 指定需要转置的字段 */ run;
说明
by Name Date确保每个Name+Date组合下的X、Y字段被转置为单独的行rename=(col1=Number)将转置后的默认列名col1改为需求的Numberwhere=(not missing(col1))过滤掉空值对应的观测drop=_name_删除转置过程生成的标识原字段名的_name_变量
注意事项
- 确保X_Number和Y_Number为相同数据类型(如均为数值型或字符型),若类型不同,可先用
PUT或INPUT函数统一类型后再处理
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

