Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. Table Count
  2.  
  3. cust1 5,000
  4. cust2 5,555
  5. cust3 6,000
  6.  
  7. %macro sqlloop(data, byvar);
  8. proc sql noprint;
  9. select &byvar.into:_values SEPARATED by '_'
  10. from %data.;
  11. quit;
  12. data_&values.;
  13. set &data;
  14. select (%byvar);
  15.  
  16. %do i=1 %to %sysfunc(count(_&_values.,_));
  17. %let var = %sysfunc(scan(_&_values.,&i.));
  18. output &var.;
  19. %end;
  20. end;
  21.  
  22. run;
  23. %mend;
  24.  
  25. %sqlloop(data=libsnap, byvar=membername);
  26.  
  27. proc sql noprint;
  28. select memname
  29. into :total_cust separated by ' '
  30. from sashelp.vmember
  31. where upcase(memname) LIKE 'CUST%'
  32. AND upcase(libname) = 'SNAP1';
  33. quit;
  34.  
  35. %macro count_obs;
  36. %do i = 1 %to %sysfunc(countw(&total_cust) );
  37. %let dsname = %scan(&total_cust, &i);
  38.  
  39. %let dsid=%sysfunc(open(&dsname) );
  40. %let nobs=%sysfunc(attrn(&dsid,nobs) );
  41. %let rc=%sysfunc(close(&dsid) );
  42.  
  43. data _total_obs;
  44. length Member_Name $15.;
  45. Member_Name = "&dsname";
  46. Total_Obs = &nobs;
  47.  
  48. format Total_Obs comma8.;
  49. run;
  50.  
  51. proc append base=Total_Obs
  52. data=_total_obs;
  53. run;
  54. %end;
  55.  
  56. proc datasets lib=work nolist;
  57. delete _total_obs;
  58. quit;
  59.  
  60. %mend;
  61. %count_obs;
  62.  
  63. data _total_obs;
  64. length Member_Name $7.;
  65. set snap1.&dsname end=eof;
  66. retain Member_Name "&dsname";
  67.  
  68. if(NOT missing(var) ) then Total_Obs+1;
  69.  
  70. if(eof);
  71.  
  72. format Total_Obs comma8.;
  73. run;
  74.  
  75. proc sql;
  76. select memname, nlobs
  77. from dictionary.tables
  78. where libname='SNAP1';
  79. quit;
  80.  
  81. %let varname=mycol; *the column you are counting;
  82. %let libname=snap1;
  83.  
  84.  
  85. proc sql;
  86. select cats("&libname..",memname)
  87. into :tables separated by ' '
  88. from dictionary.tables
  89. where libname=upcase("&libname.");
  90. quit;
  91.  
  92. data counts;
  93. set &tables. indsname=ds_name end=eof; *9.3 or later;
  94. retain count dataset_name;
  95. if _n_=1 then count=0;
  96. if ds_name ne lag(ds_name) and _n_ ne 1 then do;
  97. output;
  98. count=0;
  99. end;
  100. dataset_name=ds_name;
  101. count = count + ifn(&varname.,1,1,0); *true, false, missing; *false is 0 only;
  102. if eof then output;
  103. keep count dataset_name;
  104. run;
  105.  
  106. proc sql;
  107. select cats('%mymacro(name=',"&libname..",memname,')')
  108. into :macrocalls separated by ' '
  109. from dictionary.tables
  110. where libname=upcase("&libname.");
  111. quit;
  112.  
  113. &macrocalls.;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement