在类声明

时间:2016-12-09 14:53:46

标签: sas

我正在尝试创建一个mothly表,其中月份是类变量

除了所有月份到几年的总结之外,我想要一份包含当前蛾的摘要,即在11月我想要一份1月到11月的摘要:

the result i want and what i get

我创建了一个变量(kumpama)来告诉每个月应该在这个摘要变量中包含哪些观察结果:

the data set I now try to tabulate from

通过使用两个类语句并为除除和变量之外的所有类变量设置缺失选项,我希望实现我想要的两个摘要。

proc tabulate data=work.TabNRPab out=work.TabNRPab_out (rename= AntLgh_Sum=AntLgh) Format=numx13.;
var AntLgh;
class Huskat2 pabar upplatf2 pabman/preloadfmt missing;
class kumpama;
table (all='All Buildings' huskat2=' ')*(pabar=' ')*(upplatf2='') , (Pabman=' ' all='Year')*(antlgh=' ')*(sum=' ') 
(kumpama='jan-sep')*(AntLgh=' ')*(sum=' ')
/printmiss misstext='.';
format upplatf2 Upplatelseform. Huskat2 $huskat2FT. pabman pabman.;
run;

结果不是我的预期。现在省略了我的目标范围(1月到9月)之外的所有值。我知道默认情况下会排除包含任何类变量缺失值的观察,但我通过使用两个类语句并将缺少的选项应用于其中一个我可以解决这个问题。结果和我打算做的事情都可以在第一张图片中看到,因为我只能发布两个链接。

可能我做错了或者我误解了丢失选项的用法?

任何建议或帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

缺少的选项或多或少地与你尝试做的相反。它说的是,"如果此变量中缺少值,请 NOT 排除案例"。缺失仅影响案例(行):任何未使用MISSING选项的类变量中缺少值的情况将被完全排除。

我在这里要做的是为你只在9月份总结的价值创建一个单独的变量。这是一个例子。

data have;
  set sashelp.stocks;
  if date < '01MAR2005'd then volume_pre01mar05 = volume;
run;

proc format;
  picture million(round)
    low-high = ' 000009.9' (mult=0.000001);
quit;
proc tabulate data=have;
  class stock date;
  var volume volume_pre01mar05;
  where year(date)=2005;
  tables  stock,volume*date*sum=' ' volume*sum='Total'*format=million. volume_pre01mar05*sum='Through Feb 05'*format=million.;
run;

我有两个volume变量:一个用于存储所有月份的量,一个用于存储1月至2月的量,而在其他月份缺失。 (var变量中的缺失不会影响正在包含的行。)然后,当我想显示Jan / Feb总和时,我告诉SAS将该变量求和而不是主卷。