smoothing.sas 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. %LET SMT=SMOOTHTHIS;
  2. PROC IML;
  3. USE TESTVAR;
  4. READ ALL VAR{TESTVAR} INTO TESTVAR;
  5. USE TEMPNEW;
  6. READ ALL VAR{&RAW_SCR. COUNT OPTION0 OPTION1 OPTION2 OPTION3 OPTION4 /*OPTION8*/ OPTION9} INTO &SMT.;
  7. &SMT.Z=REPEAT(0, NROW(&SMT.), 8);
  8. &SMT.=&SMT.||&SMT.Z;
  9. /*DEFINITION OF THE KERNEL BANDWIDTH*/
  10. H=1.1*(SUM(&SMT.[,2])**-.2);
  11. /*COMPUTATION OF THE KERNEL SMOOTHING WEIGHTS.*/
  12. DO I=1 TO NROW(&SMT.);
  13. DO J=1 TO NROW(&SMT.);
  14. &SMT.[J,10]=EXP((-1/(2*H))*(&SMT.[J,1]-&SMT.[I,1])**2/TESTVAR)*&SMT.[J,2];
  15. END;
  16. /*USE OF THE KERNEL SMOOTHING WEIGHTS IN THE MOVING AVERAGE OF THE CONDITIONAL MEANS.*/
  17. DO K=1 TO NROW(&SMT.);
  18. DO Q=1 TO 6;
  19. &SMT.[I,10+Q]=&SMT.[I,10+Q]+(&SMT.[K,10]*&SMT.[K,Q+2])/SUM(&SMT.[,10]);
  20. END;
  21. END;
  22. END;
  23. /*EXPORTING THE RESULTS.*/
  24. CREATE KSOUT FROM &SMT.;
  25. APPEND FROM &SMT.;
  26. QUIT;
  27. PROC SQL NOPRINT;
  28. CREATE TABLE KSOUT AS
  29. SELECT COL1 AS &RAW_SCR., COL2 AS COUNT,
  30. COL3 AS OPTION0, COL11 AS OPTION_KSED_0,
  31. COL4 AS OPTION1, COL12 AS OPTION_KSED_1,
  32. COL5 AS OPTION2, COL13 AS OPTION_KSED_2,
  33. COL6 AS OPTION3, COL14 AS OPTION_KSED_3,
  34. COL7 AS OPTION4, COL15 AS OPTION_KSED_4,
  35. /* COL8 AS OPTION8, COL16 AS OPTION_KSED_8,*/
  36. COL8 AS OPTION9, COL16 AS OPTION_KSED_9
  37. FROM KSOUT;
  38. QUIT;
  39. PROC TRANSPOSE DATA = KSOUT
  40. OUT = KSOUT;
  41. BY &RAW_SCR.;
  42. VAR OPTION_KSED_0-OPTION_KSED_4 /*OPTION_KSED_8*/ OPTION_KSED_9;
  43. RUN;
  44. DATA KSOUT; SET KSOUT;
  45. ITEM_&I. = INPUT(SUBSTR(_NAME_, 13, 1), 5.);
  46. RENAME COL1 = KSMTHED_PERCENT;
  47. DROP _NAME_;
  48. RUN;
  49. PROC SORT DATA = KSOUT;
  50. BY ITEM_&I.;
  51. RUN;
  52. DATA KSOUT;
  53. SET KSOUT;
  54. BY ITEM_&I.;
  55. IF FIRST.ITEM_&I. THEN ID=0;
  56. ID+1;
  57. IF MOD(ID, 3) = 1 THEN LABEL=ITEM_&I.;
  58. RUN;