Advertisement
Guest User

sas_opracowanie

a guest
Jan 18th, 2019
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SAS 18.15 KB | None | 0 0
  1. /* Na podstawie zbioru SASHELP.CLASS napisz kod, który … */
  2.  
  3. /* *******************PRZETWARZANIE DANYCH************************** */
  4.  
  5. /* 1.   tworzy bibliotekę engine v9 wskazującą na katalog c:\sas\ */
  6. /* przed uruchomieniem witrualnej maszyny trzeba utworzyć na swoim dysku c folder o nazwie "sas"
  7. i dodać go do Shared Folders w ustawieniach wirtualnej maszyny */
  8. libname MYLIB v9 "/folders/myshortcuts/sas";
  9.  
  10. /* 2. tworzy bibliotekę engine v8 wskazującą na katalog c:\sas\ */
  11. libname bibl v8 "c:\sas\";
  12.  
  13. /* 3. tworzy bibliotekę engine odbc wskazującą na sterownik odbc o nazwie CRM */
  14. libname bib odbc dsn=CRM user=X pw=X;
  15.  
  16. /* 4. czyta go instrukcją SET w jednym przebiegu datastepu */
  17. data x;
  18. do i=1 to n_obs;
  19.    set sashelp.class nobs=n_obs;
  20.    przebieg=_n_;
  21.    output;
  22. end;
  23. run;
  24.  
  25. /*5 czyta go i tworzy zbiór WYNIK z nową zmienną o nazwie DWA, która ma dwie pierwsze litery imienia */
  26. data x;
  27. set sashelp.class;
  28.  
  29.  
  30. DWA = substr(name, 1, 2);
  31.  
  32. run;
  33. /*6 wybiera tylko wiersze z wiekiem większym niż 12 lat */
  34. data work.q;
  35.     set sashelp.class
  36.         (where= (age > 12));
  37. run;
  38. /*7 wybiera wiersze o imionach na literę A */
  39. proc print data=sashelp.class;
  40.     where name like "A%";
  41. run;
  42. /*8 tworzy nową kolumnę DATA_URODZENIA na podstawie wieku i dzisiejszej daty w systemie */
  43. data zadanie8;
  44.    set sashelp.class;
  45.  
  46.    DATA_URODZENIA = intnx(
  47.     'year',  /* unit of time interval */
  48.      today(), /* beginning date */
  49.      -Age,      /* number of intervals, negative goes to the past */
  50.      'same'   /* alignment of interval date. "Same" is for same day of month */
  51.     );
  52.  
  53.     format DATA_URODZENIA YEAR.;
  54.    
  55. run;
  56. /*9 tworzy nową kolumnę i liczy liczbę liter w imieniu */
  57. data x;
  58. set sashelp.class;
  59. liczba_liter=length(name);
  60. run;
  61.  
  62. /*10    tworzy nową kolumnę: flagę zerojedynkową posiadania literki a w imieniu */
  63. data x;
  64. set sashelp.class;
  65.  
  66.  
  67. flag=0;
  68. do i=0 to (length(name));
  69.    
  70.     if substr(name, i, 1) = 'a' then flag = 1;
  71.     else flag=flag;
  72.  
  73. end;
  74. run;
  75. /*11    tworzy nową kolumnę konkatenując imię z wiekiem i płcią, np. Alfred-14-M */
  76. data work.q11;
  77.     set sashelp.class;
  78.     new_field = strip(name) || "-" || strip(age) || "-" || sex;
  79. run;
  80. /*12    rozmnaża losowo każdą obserwację od 1 do 10 razy */
  81. data PD12;
  82.     set sashelp.class;
  83.     do i=1 to int(ranuni(1) * 10); /*ranuni- losowa liczba*/
  84.     output;
  85.     end;
  86.     drop i;
  87. run;
  88. /*13    do zbioru WYNIK zapisuje tylko co drugą obserwację */
  89. data zadanie13;
  90.    do point = 1 to nobs by 2;
  91.    set sashelp.class point=point nobs=nobs;
  92.    output;
  93.    end;
  94.    stop;
  95. run;
  96.  
  97. data zadanie13 v2;
  98. set sashelp.class;
  99. DATA_URODZENIA=put(intnx('year',"&sysdate"d,-age),year4.);
  100. run;
  101. /*14    sortuje go po płci rosnąco i wieku malejąco */
  102. proc sort data=sashelp.class out=x;
  103. by sex descending age;
  104. run;
  105.  
  106. /*15    na podstawie mechanizmu przetwarzania w grupach wylicza liczbę kobiet i mężczyzn */
  107. proc sql;
  108. SELECT sex, COUNT(sex) AS S FROM sashelp.class GROUP BY sex;
  109. run;
  110. /*16    na podstawie mechanizmu przetwarzania w grupach wylicza minimum i maksimum wieku dla płci */
  111. proc sort data=sashelp.class
  112.         out=sorted_class;
  113.     by sex;
  114. run;
  115.  
  116. data min_age max_age;
  117.     set sorted_class;
  118.     by sex;
  119.     if first.sex then
  120.     output min_age;
  121.     if last.sex then
  122.     output max_age;
  123. run;
  124. /*17    na podstawie mechanizmu przetwarzania w grupach wylicza średnią wieku dla płci */
  125. proc sort data=sashelp.class out=pd17;
  126.     by sex;
  127. run;
  128.  
  129. proc means data=sashelp.class;
  130.     class sex;
  131.     var age;
  132.     output out=pd17 mean()=mean;
  133. run;
  134. /*18    na podstawie zbioru SASHELP.AIR wylicza skumulowaną liczbę tysięcy pasażerów, data po dacie - rosnąco, na podstawie kolumny AIR */
  135. data zadanie18;
  136. set sashelp.air;
  137. WYNIK=sum(cum,air);
  138. retain cum;
  139. run;
  140. /*19    na podstawie funkcji lag wyrzuca do WYNIK tylko wiersze, dla których poprzedni wiersz był kobietą */
  141. data wynik;
  142. set sashelp.class;
  143. lagged=lag(sex);
  144. run;
  145. data wynik;
  146. set wynik;
  147. where lagged='F';
  148. drop lagged;
  149. run;
  150.  
  151. /*20    tworzy nową kolumnę jako sumę lat ostatnich dwóch wierszy */
  152. data wynik1;
  153. set sashelp.class;
  154. lagged=lag(age);
  155. run;
  156. data wynik1;
  157. set wynik1;
  158. SumOfAge = Age + lagged;
  159. run;
  160. /*21    który do zbioru WYNIK wyrzuca tylko obserwacje o numerach od 5 do 7 */
  161. data WORK.WYNIK;
  162.     set SASHELP.CLASS (firstobs = 5 obs =7);
  163. run;
  164. /*22    który do zbioru WYNIK wyrzuca tylko pierwszą obserwację */
  165. data wynik;
  166.     set sashelp.class (obs=1);
  167. run;
  168. /*23    który do zbioru WYNIK wyrzuca tylko ostatnią obserwację */
  169. data zadanie23;
  170. set sashelp.class end=koniec;
  171. if koniec=1 then output;
  172. run;
  173. /*24    który tworzy nowe zmienne wiek1 do wiek20 i tak je uzupełnia, by np. dla wieku równego 10 kolumna wiek10 miała wartość 1 a inne 0 */
  174. data x;
  175. array t(20) wiek1-wiek20;
  176. set sashelp.class;
  177. do i=1 to 20;
  178. if age=i then t(i)=1;
  179. else t(i)=0;
  180. end;
  181. run;
  182.  
  183. /*25    ze zbioru SASHELP.ZHC wybrać tylko te obserwacje, których kod PCMS jest w zbiorze SASHELP.ZTC */
  184. proc sql;
  185.  
  186. select * from sashelp.ZHC
  187. except
  188. select PCMS from sashelp.ZHC;
  189. run;
  190. /*26    do zbioru SASHELP.ZHC dokleić kolumnę EUC ze zbioru SASHELP.ZTC łącząc po PCMS */
  191. proc sort data=SASHELP.ZHC
  192.         out = work.a;
  193.     by PCMS;
  194. run;
  195.  
  196. data work.b;
  197.     set SASHELP.ZTC (keep = EUC PCMS);
  198. run;
  199.  
  200. proc sort data=work.b
  201.         out = work.c;
  202.     by PCMS;
  203. run;
  204.  
  205. data work.d;
  206.     merge work.a (in = in_a) work.c;
  207.         by pcms;
  208.     if in_a;
  209. run;
  210. /*27    zrobić test łączenia tabel SASHELP.ZHC i SASHELP.ZTC łącząc po PCMS,
  211. ile się połączyło, ile zostało obserwacji w pierwszym a ile w drugim */
  212. proc sort data=sashelp.ztc out=pd27ztc;
  213. by pcms;
  214. run;
  215. proc sort data=sashelp.zhc out=pd27zhc;
  216. by pcms;
  217. run;
  218.  
  219. data polaczone pierwszy drugi;
  220. merge work.pd27zhc(in=zhc) work.pd27ztc(in=ztc);
  221. by pcms;
  222. if zhc and ztc then output polaczone;
  223. if zhc and not ztc then output pierwszy;
  224. if not zhc and ztc then output drugi;
  225. run;
  226. /*28    stworzyć zbiór WYNIK, który ma kolumny od age11 do age16 i name.
  227. Dla przykładu gdy uczeń ma 11 lat to zmienna age11 jest wypełniona
  228. i posiada wartość zmiennej płeć, a inne zmienne są puste */
  229. data zadanie28;
  230. array t(6) $ age11-age16;
  231. set sashelp.class;
  232. do i=1 to 6;
  233. if age=i+10 then t(i)=sex;
  234. end;
  235. keep name age11-age16;
  236. run;
  237. /*29    na podstawie zbioru SASHELP.CARS stworzyć zbiór WYNIK,
  238. który posiada informacje o modelach samochodów w wielu wierszach.
  239. Dla danego modelu w wierszach istnieją dwie dodatkowe kolumny o nazwach: PROPERTY i VALUE,
  240. w pierwszej jest nazwa kolumny zbioru oryginalnego a w drugiej jej wartość */
  241. data wynik; /* NIE JESTEM PEWNY TEGO KODU, PLS SPRAWDZ KTOS JESZCZE */
  242. length property value $200;
  243. do i=1 to obs;
  244. set sashelp.cars nobs=obs;
  245. array zmienne(*) _NUMERIC_;
  246. array zmiennechar(*) _CHARACTER_;
  247. do j=2 to 11;
  248. property=vname(zmienne(j));
  249. value=zmienne(j);
  250. output;
  251. if (j >= 3 AND j<=7) then do;
  252. property=vname(zmiennechar(j));
  253. value=zmiennechar(j);
  254. output;
  255. end;
  256. end;
  257. end;
  258. keep model property value;
  259. run;
  260.  
  261. /*30    liczy odległość Levenshteina pomiędzy imieniem a słowem Alfred */
  262. data x;
  263. set sashelp.class;
  264.  
  265.  
  266. result=complev(Name, 'Alfred');
  267.  
  268. run;
  269. /* 31   tworzy 19 zbiorów: od name1 do name19, każdy z jedną obserwacją, pierwszy z pierwszą obserwacją zbioru wejściowego,
  270. a ostatni z ostatnią */
  271. %macro do_task;
  272.     %do i=1 %to 19;
  273.         %let my_string=%sysfunc(catx(,name,&i));
  274.         data &my_string.;
  275.             set sashelp.class (firstobs=&i obs=&i);
  276.         run;
  277.     %end;
  278. %mend do_task;
  279.  
  280. %do_task
  281. ;
  282. /* 32   tworzy zbiór WYNIK z powtórzonymi obserwacjami tyle razy ile wynosi wartość zmiennej wiek */
  283. data wynik;
  284.     set sashelp.class;
  285.     do i=1 to age;
  286.     output;
  287.     end;
  288. run;
  289. /* 33   tworzy tablicę dwuwymiarową w IML biorąc dwie pierwsze obserwacje i kolumny wiek i wagę oraz oblicza jej wyznacznik */
  290. PROC IML;
  291. USE sashelp.class;
  292. read point {1 2} var {age weight} into dane;
  293. print dane;
  294. wyznacznik=det(dane);
  295. print wyznacznik;
  296. quit;
  297.  
  298. /* **************RAPORTOWANIE*********************** */
  299.  
  300. /* 1    tworząc format grupy wiekowej: do 13 lat włącznie i powyżej, wyznaczyć
  301. procedurą MEANS liczby i uczniów i średnie wartości wieku */
  302. proc format;
  303. value wiek
  304. low-13='Mały'
  305. 13-high='Duży';
  306. run;
  307.  
  308. proc means data=sashelp.class mean;
  309. class age;
  310. format age wiek.;
  311. var age;
  312. run;
  313.  
  314. /* 2    wyznaczyć dwuwymiarową tablicę liczebności wieku i płci */
  315. proc sql;
  316. SELECT age, sex, COUNT(sex) AS S FROM sashelp.class GROUP BY age;
  317. run;
  318. /* 3    wyznaczyć tablicę liczebności wieku z jej kumulatywnymi
  319. statystykami liczebności i procentu */
  320. proc freq data=sashelp.class;
  321. table age /out=freq outcum;
  322. run;
  323. /* 4    tworzy raport HTML z tabelą z boczkiem imieniem a nagłówkiem
  324. płcią i wypełnionymi wartościami wiekiem */
  325. ods _all_ close;
  326. ods html body='rap4.htm' style=HTMLBlue file='C:\Users\ignac\Desktop\rap4.htm';
  327. proc tabulate data=sashelp.class; /* tabulate- wyswietla statystyki*/
  328.     class name sex;
  329.     var age;
  330.     table name,sex='plec'*age;
  331. run;
  332. ods html close;
  333. ods listing;
  334. /* 5    tworzy raport w PDF na podstawie SASHELP.PRDSALE z informacjami o aktualnej
  335. sumie sprzedaży i procentach po latach i regionie z podsumowaniami */
  336. ods listing close;
  337. ods pdf
  338. file='/folders/myfolders/raport.pdf';
  339. proc tabulate data=sashelp.prdsale;
  340. class year region;
  341. var actual;
  342. table year='' all,actual='Sprzedaż'*region ;
  343. run;
  344. ods pdf close;
  345. ods listing;
  346. /* 6    tworzy seryjny raport dla każdego regionu, czyli tworzy tyle HTMLi ile
  347. regionów i w każdym raportuje sumę sprzedaży w rozbiciu po latach i produktach z podsumowaniami */
  348. proc sql noprint;
  349. select distinct region into :nazwy separated by '#'
  350. from sashelp.prdsale order by region;
  351. quit;
  352. %let n_name=&sqlobs;
  353. %put &n_name***&nazwy;
  354.  
  355. %MACRO DO_MEAN;
  356. %DO I = 1 %TO &n_name;
  357. ods listing close;
  358. ods html body="\zad6&I..html";
  359. proc tabulate data=sashelp.prdsale (where=(region="%scan(&nazwy, &I, '#')"));
  360. class product year;
  361. var actual;
  362. table product='' all, mean=''*actual=''
  363. (year='' all)f=nlnum12.2
  364. / box='Actual mean';
  365. run;
  366.  
  367. ods html close;
  368. ods listing;
  369. %END;
  370. %MEND DO_MEAN;
  371. %DO_MEAN;
  372.  
  373. /* 7    tworzy listę makrozmiennych name1 do name19 wstawiając do nich nazwy uczniów w kolejności alfabetycznej */
  374. proc sql noprint;
  375. select name into :name1-:name99999
  376. from sashelp.class order by name;
  377. quit;
  378. %let n_name=&sqlobs;
  379. %put &name1;
  380. %put _user_;
  381.  
  382. /* 8    tworzy listę makrozmiennych o nazwach uczniów wstawiając do nich ich płcie */
  383. data _null_;
  384. set sashelp.class;
  385. call symput(name,trim(sex));
  386. run;
  387. %put &Alice;
  388. /* 9    tworzy jedną długą makrozmienną wstawiając do niej listę
  389. imion uczniów w kolejności alfabetycznej oddzielanych znakiem # */
  390. proc sql noprint;
  391. select name into :imiona separated by '#'/*wszystkie wartości do 1 makrozmiennej*/
  392. from sashelp.class order by name; /* alfabetycznie*/
  393. quit;
  394. %let n_name=&sqlobs;
  395. %put &n_name &imiona;
  396. /* 10   tworzy makroprogram z parametrem płeć, który listuje (PROC PRINT) obserwacje dla wybranej płci */
  397. %macro drukuj(plec);
  398. proc print data=sashelp.class (where=(sex="&plec"));
  399. run;
  400. %mend;
  401. %drukuj(M);
  402. /* 11   tworzy wykres słupkowy z średnim wiekiem dla płci */
  403. proc gchart data=sashelp.class;
  404. vbar3d sex / type=mean
  405. sumvar=age;
  406. run;
  407.  
  408. /* 12   tworzy wykres liniowy szeregu czasowego liczby pasażerów AIR ze zbioru SASHELP.AIR */
  409. proc plot data=x;
  410.   plot Air*Date;
  411.  
  412. run;
  413. /* 13   liczy percentyle zmiennej wiek: 5, 25, 50, 75 i 95 */
  414. proc univariate data=sashelp.class;
  415. var age;
  416. output out=percentile pctlpre=P_ pctlpts= 5 25 50 75 85;
  417. run;
  418. proc print data=percentile;
  419. run;
  420. /* 14   liczy odchylenie standardowe, średnią i rozstęp między-kwartylowy */
  421. proc univariate data=sashelp.class ;
  422. var age;
  423. output out=statystyki mean=mean qrange=qrange std=std; /*srednia,rozstęp, odchylenie*/
  424. run;
  425. proc print data=statystyki;
  426. run;
  427. /* 15   wrzuca do EXCELA do komórek A1,A2i A3 liczby 3,4,5. */
  428. proc univariate data=sashelp.class trimmed=1 0.01 0.1 winsorized=1 0.01 0.1 ;
  429. var age;
  430. run;
  431. /* 16   tworzy zbiór danych w którym są zapisane nazwy plików z katalogu c:\ */
  432. /* 17   tworzy pliki tekstowe o nazwach takich jak wartości zmiennej PRODUCT
  433. zbioru SASHELP.PRDSALE i wrzuca do nich informacje o aktualnej sprzedaży i roku */
  434. proc sql noprint;
  435. select distinct product into :nazwy separated by '#'/*wszystkie wartości do 1 makrozmiennej*/
  436. from sashelp.prdsale order by product;
  437. quit;
  438. %let n_name=&sqlobs;
  439. %put &n_name***&nazwy;
  440. %let dir=;
  441. %macro rob;
  442. %do i=1 %to 20;
  443. data _null_;
  444. file "&dir.%scan(&nazwy, &I, '#').txt";
  445. do l=1 to obs;
  446. set sashelp.prdsale (where=(product="%scan(&nazwy, &I, '#')") keep=actual year PRODUCT) nobs=obs;
  447. put actual year;
  448. end;
  449. run;
  450. %end;
  451. %mend;
  452. %rob;
  453. /* 18   tworzy wykres pudełkowy dla zmiennej wiek po płci */
  454. proc sort data=sashelp.class out=klasa;
  455. by sex;
  456. run;
  457.  
  458. proc boxplot data=klasa;
  459. plot age*sex /
  460. boxstyle = schematic ;
  461. run;
  462. quit;
  463. /* 19   tworzy wykres rozproszenia wieku i wagi */
  464. proc plot data=sashelp.class;
  465. plot weight*age;
  466. run;
  467. quit;
  468. /* 20   liczy średnie odporne, np. obcięte lub windsorowane dla wieku */
  469. proc univariate data=sashelp.class trimmed=1 0.01 0.1 winsorized=1 0.01 0.1 ;
  470. var age;
  471. run;
  472. /* 21   tworzy jego listing do LaTeXa */
  473. ods tagsets.tablesonlylatex /* ??? */
  474. file="S\egzamin.txt" (notop nobot);
  475. proc univariate data=sashelp.class trimmed=1 0.01 0.1 winsorized=1 0.01 0.1 ;
  476. var age;
  477. run;
  478. ods tagsets.tablesonlylatex close;
  479. ods listing;
  480.  
  481. /* 22   przerzuca statystyki dopasowania do rozkładu normalnego zmiennej
  482. wiek z procedury UNIVARIATE do zbioru danych ZGODNOSC */
  483. proc univariate data=sashelp.class normal;
  484. var age;
  485. output out=zgodnosc normaltest=normal ;
  486. run;
  487. /* ***********************STATYSTYKA************************* */
  488.  
  489. /* 1    rysuje histogram zmiennej wiek z naniesioną krzywą Gaussa */
  490. proc univariate data=sashelp.class;
  491. var age;
  492. HISTOGRAM / NORMAL (COLOR=RED W=5) ;
  493. run;
  494. /* 2    wyznacza test chi-kwadrat dla płci i wieku, traktując obie jako nominalne, policzyć p-value */
  495. proc freq data=sashelp.class;
  496. tables sex*age /
  497. chisq ; /*chi-kwadrat*/
  498. run;
  499. /* 3    wyznacza statystykę V-Cramera dla płci i wieku */
  500. proc freq data=sashelp.class;
  501. tables sex*age / chisq ;
  502. run;
  503. /* 4    wyznacza statystę Giniego dla płci i wieku */
  504. proc univariate data=sashelp.class;
  505. var age ;
  506. class sex;
  507. output out=gini gini=gini;
  508. run;
  509.  
  510. /* 5    liczy współczynnik korelacji Spearmana dla wieku i wagi */
  511. proc corr data= x sscp cov plots=matrix;
  512.   var  age;
  513.   with weight;
  514. run;
  515. /* 6    liczy współczynnik korelacji Pearsona dla wieku i wagi */
  516. /* 7    liczy statystykę Kołmogorowa—Smirnowa testu zgodności empirycznego rozkładu wieku z teoretycznym normalnym */
  517. proc univariate data=sashelp.class normal;
  518. var age;
  519. run;
  520. /* 8    liczy statystykę Shapiro—Wilka testu zgodności empirycznego rozkładu wieku z teoretycznym normalnym */
  521. proc univariate data=sashelp.class normal;
  522. var age;
  523. run;
  524. /* 9    liczy korelację cząstkową Pearsona dla wieku i wagi z wyrugowanym wpływem wzrostu */
  525. proc corr data=sashelp.class rank pearson;
  526. var weight age ;
  527. partial height;
  528. run;
  529.  
  530. /* 10   liczy współczynniki regresji liniowej dla wieku i wagi */
  531. proc reg data=sashelp.class outest=e;
  532. model age=height weight;
  533. run;
  534. quit;
  535. /* 11   liczy współczynnik determinacji regresji liniowej dla wieku i wagi */
  536. proc reg data=sashelp.class outest=e;
  537. model age=height weight/rsquare;
  538. run;
  539. quit;
  540. /* 12   przeprowadza diagnostykę modelu regresji liniowej wieku i wagi */
  541. proc reg data=sashelp.class;
  542. model age=weight / spec;
  543. output out=reszty r=r;
  544. plot r. * (p. age);
  545. plot student. * obs.;
  546. plot nqq. * student.;
  547. run;
  548. quit;
  549. proc univariate data=reszty mu0=0 alpha=0.01;
  550. var r;
  551. run;
  552. /* 13   bada homoskedastyczność modelu regresji liniowej wieku i wagi */
  553. proc reg data=sashelp.class;
  554. model age=weight / spec;
  555. output out=reszty r=r;
  556. plot r.*p. ;
  557. run;
  558. quit;
  559. /* 14   bada normalność reszt modelu regresji liniowej wieku i wagi */
  560. proc reg data=sashelp.class;
  561. model age=weight / spec;
  562. output out=reszty r=r;
  563. run;
  564. quit;
  565. proc univariate data=reszty normal;
  566. var r;
  567. qqplot r / normal(mu=est sigma=est);
  568. run;
  569.  
  570. /* 15   przeprowadza selekcję zmiennych metodami krokowymi dla modelu regresji liniowej wielorakiej wieku zależnego od wagi i wzrostu */
  571. proc reg data = x;
  572.  model Age = weight height/ vif selection = forward slentry = 0.99;
  573. run;
  574. quit;
  575. /* Moja opcja - Krzysiek */
  576. proc reg data=sashelp.class outest=e;
  577. model age=height weight/ selection=FORWARD slentry=0.1;
  578. run;
  579. quit;
  580. proc reg data=sashelp.class outest=e;
  581. model age=height weight/ selection=BACKWARD slstay=0.1;
  582. run;
  583. quit;
  584. proc reg data=sashelp.class outest=e;
  585. model age=height weight/ selection=STEPWISE slentry=0.1 slstay=0.1;
  586. run;
  587. quit;
  588. /* 16   liczy mierniki współliniowości dla modelu regresji liniowej wielorakiej wieku zależnego od wagi i wzrostu */
  589. proc reg data=sashelp.class outest=e;
  590. model age=height weight/ TOL VIF COLLIN;
  591. run;
  592. quit;
  593. /* 17   liczy współczynniki determinacji dla wszystkich modeli regresji liniowej wielorakiej wieku zależnego od wagi i wzrostu */
  594. proc reg data=sashelp.class outest=e;
  595. model age=height weight/ selection=rsquare;
  596. run;
  597. quit;
  598. /* 18   wyznacza wartości odstające i/lub wpływające w modelu regresji liniowej wieku i wzrostu */
  599. %let p=2;
  600. %let n=19;
  601. ods listing close;
  602. ods output OutputStatistics=statystyki;
  603. proc reg data=sashelp.class outest=e;
  604. model age=height/ influence vif collin spec collinoint r cli clm p;
  605. run;
  606. quit;
  607. ods output close;
  608. ods listing;
  609.  
  610. data nietypowe;
  611. set statystyki;
  612. if
  613. abs(RStudent)>3
  614. or HatDiagonal>(2*&p/&n)
  615. or CooksD > (4/&n)
  616. or abs(DFFITS)> 2*sqrt(&p/&n)
  617. or min(of DFB:) > 2/sqrt(&n)
  618. or max(of DFB:) < -2/sqrt(&n)
  619. or abs(CovRatio-1) > 3*&p/&n
  620. ;
  621. run;
  622. /* 19   liczy procent wyjaśnienia wariancji przez główne składowe dla zmiennych wiek, waga i wzrost */
  623. proc princomp data=sashelp.class out=AGS n=3;
  624. var age weight height;
  625. run;
  626.  
  627. /* 20   liczy prognozę wieku zależnego od wagi wynoszącej 80 w modelu regresji liniowej wieku i wagi */
  628. data klasa;
  629. weight=80;
  630. output;
  631. do i=1 to obs;
  632. set sashelp.class nobs=obs;
  633. output;
  634. end;
  635. stop;
  636. run;
  637. proc reg data=klasa;
  638. model age=weight ;
  639. output out=predyk p=predykcja;
  640. run;
  641. quit;
  642. /* 21   wyznacza klastry (skupienia) zmiennych (PROC VARCLUS) dla wszystkich zmiennych numerycznych
  643. zbioru SASHELP.CARS i dla wyjaśnionej wariancji (proporcji) 80%  */
  644. proc varclus data=sashelp.cars PROPORTION=0.8;
  645. var _NUMERIC_;
  646. run;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement