CrossTab.ecl 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. //
  2. // Example code - use without restriction.
  3. //
  4. IMPORT $;
  5. Person := $.DeclareData.PersonAccounts;
  6. CountAccts := COUNT(Person.Accounts);
  7. MyReportFormat := RECORD
  8. State := Person.State;
  9. A1 := SUM(GROUP,CountAccts);
  10. GroupCount := COUNT(GROUP);
  11. END;
  12. RepTable := TABLE(Person,MyReportFormat,state);
  13. OUTPUT(RepTable);
  14. /* The result set would look something like this:
  15. State A1 GroupCount
  16. AK 1 7
  17. AK 2 3
  18. AL 1 42
  19. AL 2 54
  20. AR 1 103
  21. AR 2 89
  22. AR 3 2 */
  23. MyReportFormat2 := RECORD
  24. State{cardinality(56)} := Person.State;
  25. A1 := CountAccts;
  26. GroupCount := COUNT(GROUP);
  27. MaleCount := COUNT(GROUP,Person.Gender = 'M');
  28. FemaleCount := COUNT(GROUP,Person.Gender = 'F');
  29. END;
  30. RepTable2 := TABLE(Person,MyReportFormat2,State,CountAccts );
  31. OUTPUT(RepTable2);
  32. IsValidType(STRING1 t) := t IN ['O', 'R', 'I'];
  33. IsRevolv := Person.Accounts.AcctType = 'R' OR
  34. (~IsValidType(Person.Accounts.AcctType) AND
  35. Person.Accounts.Account[1] IN ['4', '5', '6']);
  36. SetBankIndCodes := ['BB', 'ON', 'FS', 'FC'];
  37. IsBank := Person.Accounts.IndustryCode IN SetBankIndCodes;
  38. IsBankCard := IsBank AND IsRevolv;
  39. AvgBal := AVE(Person.Accounts(isBankCard),Balance);
  40. TotBal := SUM(Person.Accounts(isBankCard),Balance);
  41. AvgHC := AVE(Person.Accounts(isBankCard),HighCredit);
  42. R1 := RECORD
  43. Person.state;
  44. Person.gender;
  45. Number := COUNT(GROUP);
  46. AverageBal := AVE(GROUP,AvgBal);
  47. AverageTotalBal := AVE(GROUP,TotBal);
  48. AverageHC := AVE(GROUP,AvgHC);
  49. END;
  50. T1 := TABLE(Person, R1, state, gender);
  51. OUTPUT(T1);
  52. //******************
  53. pointRec := { REAL x, REAL y };
  54. analyze( ds ) := MACRO
  55. #uniquename(rec)
  56. %rec% := RECORD
  57. c := COUNT(GROUP),
  58. sx := SUM(GROUP, ds.x),
  59. sy := SUM(GROUP, ds.y),
  60. sxx := SUM(GROUP, ds.x * ds.x),
  61. sxy := SUM(GROUP, ds.x * ds.y),
  62. syy := SUM(GROUP, ds.y * ds.y),
  63. varx := VARIANCE(GROUP, ds.x);
  64. vary := VARIANCE(GROUP, ds.y);
  65. varxy := COVARIANCE(GROUP, ds.x, ds.y);
  66. rc := CORRELATION(GROUP, ds.x, ds.y) ;
  67. END;
  68. #uniquename(stats)
  69. %stats% := TABLE(ds,%rec% );
  70. OUTPUT(%stats%);
  71. OUTPUT(%stats%, { varx - (sxx-sx*sx/c)/c,
  72. vary - (syy-sy*sy/c)/c,
  73. varxy - (sxy-sx*sy/c)/c,
  74. rc - (varxy/SQRT(varx*vary)) });
  75. OUTPUT(%stats%, { 'bestFit: y=' +
  76. (STRING)((sy-sx*varxy/varx)/c) +
  77. ' + ' +
  78. (STRING)(varxy/varx)+'x' });
  79. ENDMACRO;
  80. ds1 := DATASET([{1,1},{2,2},{3,3},{4,4},{5,5},{6,6}], pointRec);
  81. ds2 := DATASET([{1.93896e+009, 2.04482e+009},
  82. {1.77971e+009, 8.54858e+008},
  83. {2.96181e+009, 1.24848e+009},
  84. {2.7744e+009, 1.26357e+009},
  85. {1.14416e+009, 4.3429e+008},
  86. {3.38728e+009, 1.30238e+009},
  87. {3.19538e+009, 1.71177e+009} ], pointRec);
  88. ds3 := DATASET([{1, 1.00039},
  89. {2, 2.07702},
  90. {3, 2.86158},
  91. {4, 3.87114},
  92. {5, 5.12417},
  93. {6, 6.20283} ], pointRec);
  94. analyze(ds1);
  95. analyze(ds2);
  96. analyze(ds3);