如何将这些数据转换为堆叠的单个表?

时间:2019-06-05 13:57:39

标签: sas

我在单个输出表中有一个简单的数据集。我希望将变量“年龄”和“性别”与第三个变量“ q16”相对应。预期/需求输出的示例如下。我还需要使用“权重”字段对表值进行权重。

曾尝试过各种版本的proc制表,频率,报告,但尚未提出解决方案。我希望从这篇文章中脱颖而出,是对我的问题有一个全新的了解,看看社区是否有我可以尝试的其他解决方案。

data survey;
   infile datalines dsd;
   input age : $20. sex : $10. q16 : $20. weight;
   datalines;
18 to 29,Male,VERY GOOD, 0.3984
46 to 64,Male,POOR, 1.6694
18 to 29,Female,POOR, 0.9696
46 to 64,Female,POOR, 0.6078
65 and over,Female,EXCELLENT, 1.0301
65 and over,Female,POOR, 0.7763
; 

needed layout

您可以在所附的图片中看到,这是两个垂直堆叠的变量,但我需要这两个变量加上第三个变量'q16'。在这一点上,我没有在寻找设计,而是在图像中使用加权值复制表格。

1 个答案:

答案 0 :(得分:0)

TABULATE过程可以生成所有数字,但是,没有功能可以在与维度交叉相对应的单个单元格中报告多个统计信息-每个数字都有其自己的单元格。

必须在VAR语句中指定已计算统计信息的变量,而计数或百分比是针对CLASS变量的。

例如:

data have;
  do person = 1 to 3218 + 1991;

    length status $5;
    status = ifc (ranuni(123) < 1991/(1991+3218), 'Dead', 'Alive');

    if ranuni(123) < 0.001 then age = .; else age = floor(28+35*ranuni(123));

    length gender $6;
    if status = 'Dead'
      then gender = ifc(ranuni(123) < 896 /(896+1095), 'Female', 'Male');
      else gender = ifc(ranuni(123) < 1977/(1977+1241), 'Female', 'Male');

    output;
  end;
run;

proc tabulate data=have;
  class status gender;
  var age;
  table
    age * (N NMISS MEAN STD MIN MAX MEDIAN QRANGE)
    gender * (N COLPCTN)
    , 
    status;
run;

enter image description here

要获得图像中的准确表,您可以通过一个或多个统计过程计算结果,并通过data _null_ODSOUT组件对象生成输出表。