I have created code till end which create the dataset two if more than 10 observations for row, if not then will create single dataset, my question is how to find and combine datasets which are small as 1 limiting to 10 rows. data alert; input alert_id $2. message; datalines; A1 1 A1 1 A1 1 A1 1 A1 1 A1 1 A1 1 A1 1 A1 1 A1 1 A1 1 A1 1 A1 1 A1 1 A1 1 A1 1 A2 1 A2 1 A2 1 A2 1 A2 1 A2 1 A2 1 A2 1 A3 1 A3 1 A3 1 A3 1 A3 1 A3 1 A4 1 A4 1 A4 1 A5 1 A5 1 A5 1 ; proc sql ; select count(distinct alert_id ) into :n from alert; select distinct alert_id into :ant1 - :ant1%left(&n) from alert; quit; %macro splitd; %do i =1 %to &n; %put &&ant&i.; data &&ant&i.; set alert; where alert_id=resolve("&&ant&i.") ; run; proc sql; create table count&i as select distinct alert_id ,count(* ) as totaobs from work.&&ant&i. group by alert_id; select totaobs into :nb&i from count&i; quit; %put &&nbl&i; %let totalds&i=%sysevalf(%left(&&nb&i.)/10,ceil); %put &&totalds&i.; %if &&nb&i. >=10 %then %do; DATA %DO J=1 %TO &&totalds&i.; WANT_&i.&j. %END;; SET work.&&ant&i.; %DO J=1 %TO &&totalds&i.; %IF &J. > 1 %THEN %DO; ELSE %END; IF _N_ LE 10* &J. THEN OUTPUT WANT_&i.&j.; %END; RUN; %end; %END;; %mend; %splitd;
... View more