Sas 类变量在PROC表格中。需要替代所有命令

Sas 类变量在PROC表格中。需要替代所有命令,sas,Sas,我有以下两张桌子。一个有两个下注结果,另一个有许多需要添加的“虚拟”下注。我想得到原始样本的平均值,加上虚拟赌注的样本的平均值,然后对列之间的差异进行卡方检验,对行之间的差异进行Kruskal-Wallis检验 我在将数据制成表格以得出这两个类别的平均值时遇到了一个问题 data A; input username $ betdate : datetime. stake winnings node $; dateOnly = datepart(betdate) ; fo

我有以下两张桌子。一个有两个下注结果,另一个有许多需要添加的“虚拟”下注。我想得到原始样本的平均值,加上虚拟赌注的样本的平均值,然后对列之间的差异进行卡方检验,对行之间的差异进行Kruskal-Wallis检验

我在将数据制成表格以得出这两个类别的平均值时遇到了一个问题

   data A;
   input username $  betdate : datetime. stake winnings node $;
   dateOnly = datepart(betdate) ;
   format betdate DATETIME.;
   format dateOnly ddmmyy8.;
   datalines; 
    player1 12NOV2008:12:04:01 90 -90 X
    player1 04NOV2008:09:03:44 100 40  L
    player2 07NOV2008:14:03:33 120 -120 W
    player1 05NOV2008:09:00:00 50 15 L
    player1 05NOV2008:09:05:00 30 5 W
    player1 05NOV2008:09:00:05 20 10 L
    player2 09NOV2008:10:05:10 10 -10 W
    player2 15NOV2008:15:05:33 35 -35 W
    player1 15NOV2008:15:05:33 35 15 L
    player1 15NOV2008:15:05:33 35 15 L
run;

proc sql; create table B(toAdd num,node char(100)); quit;
proc sql;  insert into B (toAdd, node)                                                                                         
    values(5, 'X')
    values(3, 'L')
    values(7, 'W') ;                                                                                                                                                                                            
quit; 
我想显示没有虚拟赌注的平均值,以及包括虚拟赌注的平均值。我添加了虚拟赌注,如下所示:

proc sort data=A out=A; by node; run;
data A;
    modify A B;
    by node;
    do i = 1 to toAdd;
    stake = 0;
    stakediff = -1;
    dummy = 1;
    output;
end;
run;
问题是当我将数据制成表格时,因为实际上没有两个不同的类别,它没有显示我想要什么

proc tabulate data=A;
class node dummy;
    var stake winnings;
    table node="",stake="" * (Mean="")*(dummy="" ALL);
run;
我使用虚拟赌注来创建一个基于大“N”的均值。我会在PROC报告中这样做,并以较大的“N”作为分子手动计算平均值,但我需要执行Kruskal-Wallis和卡方检验。让赌注为零的虚拟赌注更容易保持简单,并在每个类别中保持正确的计数。此外,在没有每个类别中的虚拟下注的情况下,动态计算标准误差(或从PROC TABLATE创建的结果中提取标准误差)是非常重要的

我怎么能只显示上面PROC TABLATE的结果,而不显示0、1和所有类别,因为当虚拟值为1时,这些条目是没有意义的?理想情况下,我希望将“无虚拟对象”视为0,“有虚拟对象”视为1,并将ALL列的结果显示为“WTIH虚拟对象”=1类别。然后,我可以在“NODE”类变量上执行KRUSKAL-WALLIS,在虚拟类变量上执行卡方检验,因为目前为止,我无法在测试中仅将0类和1类作为类来执行这些测试


如果我可以将类别dummy=0中的所有行复制到类别dummy=1中,我认为这将解决问题。

您的“如果我可以”基本上是正确的想法。你需要修正你的数据以反映你想要的分组;如果我理解正确,dummy=0应该只是非总计下注,dummy=1应该是dummy和非总计下注。因此,需要两次输出dummy=0行,一次输出dummy=1,一次输出dummy=0

比如:

data A;
    modify A B;
    by node;
    output;
    dummy=1;
    output;
    do i = 1 to toAdd;
    stake = 0;
    stakediff = -1;
    dummy = 1;
    output;
end;
run;