我正在尝试创建一个包含数字和百分比结果的矩阵。我得到了两张桌子
id cc
1 2
1 5
1 40
2 55
2 2
2 130
2 177
3 20
3 55
3 40
4 30
4 100
id Description
1 Dell
1 Lenovo
1 HP
2 Sony
2 Dell
2 Acer
2 Other
3 Fujitsu
3 Sony
3 HP
4 Apple
4 Asus
我已经创建了一个看起来像的表。我使用了代码
CC CC1 CC2… …CC177
1 264 5 0
2 0 132 6
…
…
177 2 1 692
data RESULT;
set id_CC;
by id;
retain CC1-CC177; /*CC range from 1 to 177*/
array CC_List(177) CC1-CC177;
if first.id then do i=1 to 177;
id_LIST(i)=0;
end;
CC_List(CC)=1;
if last.id then output;
run;
ods output sscp=coocs;
ods select sscp;
proc corr data=RESULT sscp;
var CC1-CC177;
run;
/*proc print data=coocs;*/
/*run;*/
/**/
换句话说,有多少id cc1也有cc2..cc177..etc。现在,我想知道是否可以在每个数字旁边添加百分比。例如,如果CC1 * CC1 = 264(100%),那么CC1 * CC2 = 5/264 = 1.9%
我想要创建的另一个表是在矩阵上描述每个CC。每个CC号代表一个品牌。 2 =戴尔177 =其他等我想创建一个表格看起来像 如果我想将CC1 CC2更改为字符,我该如何修改数组?最终,我希望我的表看起来像
Description Dell Lenovo HP Sony Acer Other Fujitsu Sony
Dell 264 (100%)
Lenovo
HP 50 (10%)
Sony
Acer
Other
Fujitsu
Sony
换句话说,戴尔有多少人也有宏碁,索尼,其他等?
答案 0 :(得分:0)
重命名是一个在这里被问到的问题,所以我现在就离开那个。
对于您需要创建字符变量的百分比。要计算百分比,请使用自动变量_n_
作为行,但也将作为计算的分母。然后使用连接函数(如cat)以N(PP%)格式创建变量。
data want;
set have;
array cc(177) cc1-cc177;
array dd(177) $ dd1-dd177;
do i=1 to 177;
percent=cc(i)/cc(_n_);
dd(i)=cats(cc(i), "(", put(percent, percent8.1), ")");
end;
run;
答案 1 :(得分:0)
在回答Reeza时,我做了:
data RESULT_PRE;
set ID_CC;
by ID;
retain CC1-CC177;
array CC_LIST(177) CC1-CC177;
array DD_LIST(177) $ DD1-DD177;
if first.id then do i=1 to 177;
CC_LIST(i)=0;
end;
CC_LIST(CC)=1;
if last.id then output;
run;
data RESULT;
set RESULT_PRE;
array CC_LIST(177) CC1-CC177;
array DD_LIST(177) $ DD1-DD177;
do i=1 to 177;
percent=CC_LIST(i)/CC_LIST(_n_);
DD_LIST(i)=cats(CC_LIST(i), "(", put(percent, percent8.1), ")");
end;
run;
错误显示数组下标超出xx列xx和ERROR 68-185的范围:功能CC未知或无法访问。