PROC PRINT и PROC MEANS

Работя върху проблем и има нещо, което не разбирам.

Наборът от данни sasdata.prdsales съдържа 5000 наблюдения.

 libname sastemp 'SAS-data-library';
      options obs=500;
      proc print data=sasdata.prdsales (firstobs=100);
 run; 
 options obs=max;
 proc means data=sasdata.prdsales(firstobs=500);
 run;

Разбирам, че OBS= указва броя наблюдения, които SAS ще обработи, така че за оператора PROC PRINT мисля, че започвайки с наблюдение номер 100, завършвайки с наблюдение номер 499, ще бъдат обработени 500 наблюдения.

За стъпката PROC MEANS, OBS=MAX инструктира SAS да обработи всички наблюдения, но тъй като началното наблюдение е от 500, общият брой наблюдения ще бъде от 500 до 5000, което е 4501 наблюдения.

Отговорът на този въпрос обаче казва, че PROC PRINT има 501 наблюдения и аз съм объркан...

Благодаря ти.


sas
person hyg17    schedule 21.10.2018    source източник
comment
Откъде идва въпросът? И на мен ми се струва грешно, но не поради причините, които си мислите.   -  person Reeza    schedule 22.10.2018
comment
Това е от изпит от Acualtests.com Изпит A00-201 Въпрос 2. Имам само pdf, който е създаден въз основа на тези проблеми, така че определено има някои правописни грешки и странно показване на данни... но не искам да се получава просто казвам, че все още е печатна грешка.   -  person hyg17    schedule 22.10.2018
comment
Не е печатна грешка, просто е грешно, но получавате това, за което плащате. Горещо препоръчвам безплатните електронни курсове на SAS, ако все още не сте ги взели.   -  person Reeza    schedule 22.10.2018


Отговори (2)


OBS= не е броят на наблюденията за обработка, вместо това трябва да мислите за него като за LASTOBS= опция (която не съществува)

OBS=500 сам ще обработи 500 реда поради неявни FIRSTOBS от 1.

За ефективния случай на FIRSTOBS=100 OBS=500 ще бъдат обработени редове от 100 до 500 или 401 реда.

person Richard    schedule 21.10.2018
comment
Благодаря ви за помощта, успях да разбера какво се случва. - person hyg17; 22.10.2018

Използвайте по-малки числа, за да е по-лесно да проверите на пръстите си.

1    options obs=10;
2    proc print data=sashelp.class(firstobs=5);
3    run;

NOTE: There were 6 observations read from the data set SASHELP.CLASS.

Obs    Name       Sex    Age    Height    Weight

  5    Henry       M      14     63.5      102.5
  6    James       M      12     57.3       83.0
  7    Jane        F      12     59.8       84.5
  8    Janet       F      15     62.5      112.5
  9    Jeffrey     M      13     62.5       84.0
 10    John        M      12     59.0       99.5

И така, започна с наблюдение #5 и спря на наблюдение #10. 10-5+1=6.

Така че за вашия проблем можете да изчислите 500-100+1 = 401.

Друг начин да мислите за това е, че като зададете FIRSTOBS=N, вие му казвате да пропусне N-1 наблюдения. Така че FIRSTOBS=100 означава да пропуснете 99 наблюдения. 500-99=401.

person Tom    schedule 22.10.2018