在最终 Table 中也合并 Not Missing Observation 并转置最终输出
Merging the Not Missing Observation also in the final Table and transpose the final Output
我在 10 个不同的表中有 10 个不同的变量,其中包含 VARNAME 和 MISSING PERCENT。
在这 10 个中,假设有 5 个没有 "MISSING PERCENT",我想将这些观察结果包含在 0% 缺失中。现在,它在最终输出中消除了这个观察结果。
data Final_Output_All_Missing;
length VARNAME $ 30;
merge work.Final_Output_MOLD work.Final_output_tbm_stage2
work.final_output_article7
work.final_output_tbm_stage1 work.final_output_bladder
work.final_output_batch_id;
by varname;
keep VARNAME PERCENT;
run;
VARNAME MISSING PERCENT
BLADDER 0.10
MOLD 0.06
TBM_STAGE1 0.18
TBM_STAGE2 99.9
其次,我已经合并了包含不同变量的不同表(0%还需要合并)如下图:
合并后,我想看到这种格式的输出。我可以使用这种格式吗?
BLADDER MOLD TBM_STAGE1 TBM_STAGE2
1. 0.10% 0.06% 0.18% 99.9%
感谢您的帮助!
下面的代码将:
- 用0替换缺失值(我在数据中添加了缺失值)
- 添加百分比格式 xx.xx%
- 转置数据
代码:
/*Create input data*/
data have;
informat VARNAME .;
input VARNAME $ MISSING_PERCENT ;
length VARNAME ;
datalines;
BLADDER 0.10
MOLD 0.06
TBM_STAGE1 0.18
TBM_STAGE2 99.9
TBM_STAGE3 .
TBM_STAGE4 .
;;;;;;
run;
/*Replace missing values with 0, and Add % format */
proc sql;
create table work.new as
select
VARNAME,
coalesce(MISSING_PERCENT,0)/100 as MISSING_PERCENT format=percent8.2
from work.have;
quit;
/*Transpose Data*/
proc transpose data=work.new
out=work.want name=VARNAME;
id VARNAME;
run;
输入:
格式化:
输出:
感谢您的回答。它完美地提供了我想要的东西。
但是,我确实有一个包含 160 个变量的列表,我认为对其进行硬编码会花费更多的精力。我所做的是排除了缺失百分比为 0% 的变量,并提取了缺失百分比的变量。
这就是我提取缺失百分比的方法:
> data Final_Output_&var;
set Final_Output_&var;
VARNAME = "&var";
%if &t=char %then
%do;
where put (&var., $missfmt.) in ("Missing");
%end;
%else
%do;
where put (&var., missfmt.) in ("Missing");
%end;
run;
再次感谢您的快速回复!!!
最好的祝福,
潘卡吉
我在 10 个不同的表中有 10 个不同的变量,其中包含 VARNAME 和 MISSING PERCENT。
在这 10 个中,假设有 5 个没有 "MISSING PERCENT",我想将这些观察结果包含在 0% 缺失中。现在,它在最终输出中消除了这个观察结果。
data Final_Output_All_Missing;
length VARNAME $ 30;
merge work.Final_Output_MOLD work.Final_output_tbm_stage2
work.final_output_article7
work.final_output_tbm_stage1 work.final_output_bladder
work.final_output_batch_id;
by varname;
keep VARNAME PERCENT;
run;
VARNAME MISSING PERCENT
BLADDER 0.10
MOLD 0.06
TBM_STAGE1 0.18
TBM_STAGE2 99.9
其次,我已经合并了包含不同变量的不同表(0%还需要合并)如下图:
合并后,我想看到这种格式的输出。我可以使用这种格式吗?
BLADDER MOLD TBM_STAGE1 TBM_STAGE2
1. 0.10% 0.06% 0.18% 99.9%
感谢您的帮助!
下面的代码将:
- 用0替换缺失值(我在数据中添加了缺失值)
- 添加百分比格式 xx.xx%
- 转置数据
代码:
/*Create input data*/
data have;
informat VARNAME .;
input VARNAME $ MISSING_PERCENT ;
length VARNAME ;
datalines;
BLADDER 0.10
MOLD 0.06
TBM_STAGE1 0.18
TBM_STAGE2 99.9
TBM_STAGE3 .
TBM_STAGE4 .
;;;;;;
run;
/*Replace missing values with 0, and Add % format */
proc sql;
create table work.new as
select
VARNAME,
coalesce(MISSING_PERCENT,0)/100 as MISSING_PERCENT format=percent8.2
from work.have;
quit;
/*Transpose Data*/
proc transpose data=work.new
out=work.want name=VARNAME;
id VARNAME;
run;
输入:
格式化:
输出:
感谢您的回答。它完美地提供了我想要的东西。 但是,我确实有一个包含 160 个变量的列表,我认为对其进行硬编码会花费更多的精力。我所做的是排除了缺失百分比为 0% 的变量,并提取了缺失百分比的变量。
这就是我提取缺失百分比的方法:
> data Final_Output_&var;
set Final_Output_&var;
VARNAME = "&var";
%if &t=char %then
%do;
where put (&var., $missfmt.) in ("Missing");
%end;
%else
%do;
where put (&var., missfmt.) in ("Missing");
%end;
run;
再次感谢您的快速回复!!! 最好的祝福, 潘卡吉