SimpleRandomSample.ecl 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. //
  2. // Example code - use without restriction.
  3. //
  4. SimpleRandomSample(InFile,UID_Field,SampleSize,Result) := MACRO
  5. //build a table of the UIDs
  6. #uniquename(Layout_Plus_RecID)
  7. %Layout_Plus_RecID% := RECORD
  8. UNSIGNED8 RecID := 0;
  9. InFile.UID_Field;
  10. END;
  11. #UNIQUENAME(InTbl)
  12. %InTbl% := TABLE(InFile,%Layout_Plus_RecID%);
  13. //then assign unique record IDs to the table entries
  14. #uniquename(IDRecs)
  15. %Layout_Plus_RecID% %IDRecs%(%Layout_Plus_RecID% L, INTEGER C) := TRANSFORM
  16. SELF.RecID := C;
  17. SELF := L;
  18. END;
  19. #UNIQUENAME(UID_Recs)
  20. %UID_Recs% := PROJECT(%InTbl%,%IDRecs%(LEFT,COUNTER));
  21. //discover the number of records
  22. #UNIQUENAME(WholeSet)
  23. %WholeSet% := COUNT(InFile) : GLOBAL;
  24. //then generate the unique record IDs to include in the sample
  25. #UNIQUENAME(BlankSet)
  26. %BlankSet% := DATASET([{0}],{UNSIGNED8 seq});
  27. #UNIQUENAME(SelectEm)
  28. TYPEOF(%BlankSet%) %SelectEm%(%BlankSet% L, INTEGER c) := TRANSFORM
  29. SELF.seq := ROUNDUP(%WholeSet% * (((RANDOM() % 100000)+1) / 100000));
  30. END;
  31. #UNIQUENAME(selected)
  32. %selected% := NORMALIZE( %BlankSet%, SampleSize, %SelectEm%(LEFT, COUNTER));
  33. //then filter the original dataset by the selected UIDs
  34. #UNIQUENAME(SetSelectedRecs)
  35. %SetSelectedRecs% := SET(%UID_Recs%(RecID IN SET(%selected%,seq)),UID_Field);
  36. result := infile(UID_Field IN %SetSelectedRecs% );
  37. ENDMACRO;
  38. //*****************************************************
  39. SomeFile := DATASET([{'A1'},{'B1'},{'C1'},{'D1'},{'E1'},
  40. {'F1'},{'G1'},{'H1'},{'I1'},{'J1'},
  41. {'K1'},{'L1'},{'M1'},{'N1'},{'O1'},
  42. {'P1'},{'Q1'},{'R1'},{'S1'},{'T1'},
  43. {'U1'},{'V1'},{'W1'},{'X1'},{'Y1'},
  44. {'A2'},{'B2'},{'C2'},{'D2'},{'E2'},
  45. {'F2'},{'G2'},{'H2'},{'I2'},{'J2'},
  46. {'K2'},{'L2'},{'M2'},{'N2'},{'O2'},
  47. {'P2'},{'Q2'},{'R2'},{'S2'},{'T2'},
  48. {'U2'},{'V2'},{'W2'},{'X2'},{'Y2'},
  49. {'A3'},{'B3'},{'C3'},{'D3'},{'E3'},
  50. {'F3'},{'G3'},{'H3'},{'I3'},{'J3'},
  51. {'K3'},{'L3'},{'M3'},{'N3'},{'O3'},
  52. {'P3'},{'Q3'},{'R3'},{'S3'},{'T3'},
  53. {'U3'},{'V3'},{'W3'},{'X3'},{'Y3'},
  54. {'A4'},{'B4'},{'C4'},{'D4'},{'E4'},
  55. {'F4'},{'G4'},{'H4'},{'I4'},{'J4'},
  56. {'K4'},{'L4'},{'M4'},{'N4'},{'O4'},
  57. {'P4'},{'Q4'},{'R4'},{'S4'},{'T4'},
  58. {'U4'},{'V4'},{'W4'},{'X4'},{'Y4'}
  59. ],{STRING2 Letter});
  60. ds := DISTRIBUTE(SomeFile,HASH(letter[2]));
  61. SimpleRandomSample(ds,Letter,6, res1)
  62. SimpleRandomSample(ds,Letter,6, res2)
  63. SimpleRandomSample(ds,Letter,6, res3)
  64. SimpleRandomSample(ds,Letter,6, res4)
  65. SimpleRandomSample(ds,Letter,6, res5)
  66. SimpleRandomSample(ds,Letter,6, res6)
  67. SimpleRandomSample(ds,Letter,6, res7)
  68. SimpleRandomSample(ds,Letter,6, res8)
  69. SimpleRandomSample(ds,Letter,6, res9)
  70. SimpleRandomSample(ds,Letter,6, res10)
  71. SimpleRandomSample(ds,Letter,6, res11)
  72. SimpleRandomSample(ds,Letter,6, res12)
  73. SimpleRandomSample(ds,Letter,6, res13)
  74. SimpleRandomSample(ds,Letter,6, res14)
  75. SimpleRandomSample(ds,Letter,6, res15)
  76. SimpleRandomSample(ds,Letter,6, res16)
  77. SimpleRandomSample(ds,Letter,6, res17)
  78. SimpleRandomSample(ds,Letter,6, res18)
  79. SimpleRandomSample(ds,Letter,6, res19)
  80. SimpleRandomSample(ds,Letter,6, res20)
  81. SimpleRandomSample(ds,Letter,6, res21)
  82. SimpleRandomSample(ds,Letter,6, res22)
  83. SimpleRandomSample(ds,Letter,6, res23)
  84. SimpleRandomSample(ds,Letter,6, res24)
  85. SimpleRandomSample(ds,Letter,6, res25)
  86. SimpleRandomSample(ds,Letter,6, res26)
  87. SimpleRandomSample(ds,Letter,6, res27)
  88. SimpleRandomSample(ds,Letter,6, res28)
  89. SimpleRandomSample(ds,Letter,6, res29)
  90. SimpleRandomSample(ds,Letter,6, res30)
  91. SimpleRandomSample(ds,Letter,6, res31)
  92. SimpleRandomSample(ds,Letter,6, res32)
  93. SimpleRandomSample(ds,Letter,6, res33)
  94. SimpleRandomSample(ds,Letter,6, res34)
  95. SimpleRandomSample(ds,Letter,6, res35)
  96. SimpleRandomSample(ds,Letter,6, res36)
  97. SimpleRandomSample(ds,Letter,6, res37)
  98. SimpleRandomSample(ds,Letter,6, res38)
  99. SimpleRandomSample(ds,Letter,6, res39)
  100. SimpleRandomSample(ds,Letter,6, res40)
  101. OUTPUT(CHOOSEN(res1,5));
  102. OUTPUT(CHOOSEN(res2,5));
  103. OUTPUT(CHOOSEN(res3,5));
  104. OUTPUT(CHOOSEN(res4,5));
  105. OUTPUT(CHOOSEN(res5,5));
  106. OUTPUT(CHOOSEN(res6,5));
  107. OUTPUT(CHOOSEN(res7,5));
  108. OUTPUT(CHOOSEN(res8,5));
  109. OUTPUT(CHOOSEN(res9,5));
  110. OUTPUT(CHOOSEN(res10,5));
  111. OUTPUT(CHOOSEN(res11,5));
  112. OUTPUT(CHOOSEN(res12,5));
  113. OUTPUT(CHOOSEN(res13,5));
  114. OUTPUT(CHOOSEN(res14,5));
  115. OUTPUT(CHOOSEN(res15,5));
  116. OUTPUT(CHOOSEN(res16,5));
  117. OUTPUT(CHOOSEN(res17,5));
  118. OUTPUT(CHOOSEN(res18,5));
  119. OUTPUT(CHOOSEN(res19,5));
  120. OUTPUT(CHOOSEN(res20,5));
  121. OUTPUT(CHOOSEN(res21,5));
  122. OUTPUT(CHOOSEN(res22,5));
  123. OUTPUT(CHOOSEN(res23,5));
  124. OUTPUT(CHOOSEN(res24,5));
  125. OUTPUT(CHOOSEN(res25,5));
  126. OUTPUT(CHOOSEN(res26,5));
  127. OUTPUT(CHOOSEN(res27,5));
  128. OUTPUT(CHOOSEN(res28,5));
  129. OUTPUT(CHOOSEN(res29,5));
  130. OUTPUT(CHOOSEN(res30,5));
  131. OUTPUT(CHOOSEN(res31,5));
  132. OUTPUT(CHOOSEN(res32,5));
  133. OUTPUT(CHOOSEN(res33,5));
  134. OUTPUT(CHOOSEN(res34,5));
  135. OUTPUT(CHOOSEN(res35,5));
  136. OUTPUT(CHOOSEN(res36,5));
  137. OUTPUT(CHOOSEN(res37,5));
  138. OUTPUT(CHOOSEN(res38,5));
  139. OUTPUT(CHOOSEN(res39,5));
  140. OUTPUT(CHOOSEN(res40,5));