附有百分比的SAS表

时间:2015-04-07 16:04:30

标签: sql arrays sas correlation

我正在尝试创建一个包含数字和百分比结果的矩阵。我得到了两张桌子

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

换句话说,戴尔有多少人也有宏碁,索尼,其他等?

2 个答案:

答案 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未知或无法访问。