能够将观察值转换为0,但总和有问题

时间:2018-10-17 16:18:03

标签: sas

我有一个原始数据集,如下所示: enter link description here

我试图将“ T”的观测值转换为0, 然后读入数据集并打印出来。就是这个。

但是,对于我的代码,仅通过查看第5行中的第一个观察结果,显然有些问题。 例如,“ Nov”的第一个观察值不应为0。

我无法弄清楚出了什么问题,我想知道有人愿意就下一步的工作给我一些建议吗?非常感谢你!高度赞赏。

我的代码如下:

    INFILE "&DIRLSB.Pr1Snowfall1.csv" DSD FIRSTOBS=5;
  DROP i;
  INPUT Season $@;
  INPUT Year 1-4  Season 1-7 Sep Oct Nov Dec Jan Feb Mar Apr May Total;
  ARRAY Months (*) Sep -- May;
  DO i = 1 TO dim(Months);
  IF Months(i)=. Then Months(i)=0;
  END;
  RUN;

1 个答案:

答案 0 :(得分:1)

我猜你有一个缺失的T;某处将T(race)读为缺失T的语句。“。T不等于。”

我会使用合并功能。真的没有必要将丢失的T更改为0吗?

missing t;
data snow;
   infile cards firstobs=2;
   input Season:$7. Sep Oct Nov Dec Jan Feb Mar Apr May Total;  
   array mth[*] Sep--May;
   do i = 1 to dim(mth);
      mth[i] = coalesce(mth[i],0);
      end;
   t = sum(of mth[*]);
   drop i;
   cards;
Season Sep Oct Nov Dec Jan Feb Mar Apr May Total 
1884-85 0 T 1 27.1 22.2 17 3.5 19.5 T 90.3 
1885-86 0 1.7 8.2 8.4 16.9 16 6.5 7 0 64.7 
1886-87 0 T 22.2 12.5 12 18.4 6.3 1.2 0 72.6 
1893-94 0 0.5 6.1 27.6 20 29.5 5.4 13.3 0 102.4 
1894-95 0 T 11.1 22.1 26.5 23.6 9.5 0.6 0 93.4 
1895-96 0 1.5 5.9 8.7 22.5 39.1 45.1 1 0 123.8 
1896-97 0 T 5.5 13.9 20.1 13.7 8.1 5.2 0 66.5 
1897-98 0 0 10.1 18.4 32.1 26.8 1.2 2.4 0 91 
1898-99 0 T 10.6 27 16.6 16.3 21.2 4.3 T 96 
1899-00 T T 1.3 21.5 24.7 28.5 54 1.3 0 131.3 
1906-07 0 5 5.7 18.7 11.7 15.7 3.1 2.5 1.3 63.7 
1907-08 0 0 2.2 11.6 16.5 19.8 7.9 6.3 3 67.3 
1908-09 0 0.5 4.6 10 22.5 6.1 9.7 9.8 3.3 66.5 
1909-10 0 T 1.7 14.6 22 42.7 3.4 0.5 0 84.9 
1910-11 0 2.2 15.7 29.8 9.5 30 13.5 4.7 2 107.4 
1911-12 0 0 6.5 7.5 21.5 10.8 8.8 6.9 T 62 
;;;;
   run;
proc print;
   run;