SAS Proc Tabulate - 添加不属于数据集的行标题

时间:2018-02-20 16:24:17

标签: sas

我正在处理索赔数据,其中我们有四种不同的遭遇类型:牙科,机构,专业和药房。我需要为SAS Proc Tabulate中的不同组织开发单独的报告,这些报告显示了这四种类型的声明。有些组织有四种类型而其他组织只有3.但如果一个计划没有一种特定类型,我仍然需要在报告中显示缺少值和标题。

说计划A只有机构,药房和专业类型,没有牙科索赔。我想展示列出的所有四种类型的牙齿缺失值。这可以通过Proc制表步骤来实现吗? (或者我是否必须修改数据集以为每种类型设置空值?)任何帮助都将非常感激。

这是主要代码:

proc tabulate data=servmnth format=COMMA.0;
class plan_alias encounter_type service_Month;
var netted_claim_count;
format encounter_type $enc.;
table encounter_type= ' ' ALL='Total', sum=' '*netted_claim_count= 'Netted 
Claims by Service Month'*service_Month = ' ';
where plan_alias="&plan.";
run;

直到我意识到一些计划直接错过了一两种遭遇类型,这一切都很好。我尝试使用proc格式为遇到类型设置格式,但这不起作用。我想知道在table语句中是否有任何我可以附加到encounter_type变量的内容,无论如何都会显示4行。

1 个答案:

答案 0 :(得分:1)

表格的classdata=应该是您想要在输出中显示的所有维值的显式交叉。类数据可以从允许值列表外部强制执行,也可以从表格之前的data=生成。

考虑一些样本声明计数数据,具有特殊属性,对于每个计划,encounter_types被限制为一组不同的值。

data claim_counts;
  do claim_id = 1 to 1e5;
    plan_id = floor(16 * ranuni(123));
    if plan_id = 0 then continue;
    date = mdy(ceil(12*ranuni(123)),1,2017);
    claim_count = ceil(abs(12*rannor(123)));
    member_id = 1e8 +  plan_id * 1e6 + floor(1e6 * ranuni(123));
    do until (band(plan_id,2**(encounter_type-1)));
      encounter_type = ceil(4*ranuni(123));
    end;
    output;
  end;
  format date yymmd.;
run;

可以从不同的允许值列表构建类数据

* preordained, external class data (defined dimension data);

data plans;
  do plan_id = 0 to 15;
    output;
  end;
run;

data encounter_types;
  do encounter_type = 1 to 4;
    output;
  end;
run;

data months;
  do month = 1 to 12;
    date = mdy(month,1,2017);
  end;
  format date yymmd.;
run;

* cross all allowed dimensional values for defined coverage;
 proc sql;
   create table classdata as
   select plan_id, encounter_type, date
   from plans, encounter_types, months;
quit;

或者根据数据中观察到的维度覆盖率构建

proc sql;
  create table classdata2 as
  select plan_id, encounter_type, date
  from (select distinct plan_id from claim_counts)
     , (select distinct encounter_type from claim_counts)
     , (select distinct date from claim_counts)
  ;

在大型数据集中,观察到的覆盖范围很可能与定义的覆盖范围匹配

最后,使用classdata=语句中的tabulate选项。在下文中,我还将plan_id添加到页面维度

中的表中
proc tabulate data=claim_counts classdata=classdata;
  class plan_id encounter_type date;
  var claim_count;

  table 
    plan_id
    ,
    encounter_type = 'type' ALL
    ,
    sum = ' ' * claim_count*f=comma9. * date = ' '
    ;
  ;
run;

页面维度允许您一次为多个plan_id创建输出,它将标识下表所属的计划。计划识别也可以使用by语句或标题声明完成。