Skip to content

Commit b4b06f8

Browse files
authored
Merge pull request #4 from RhoInc/completecases
Completecases
2 parents 64fbc19 + 8598272 commit b4b06f8

File tree

5 files changed

+259
-114
lines changed

5 files changed

+259
-114
lines changed

img/version1_0.png

79.2 KB
Loading

img/version2_0.png

80.5 KB
Loading

src/rawtosankey.sas

Lines changed: 63 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ xvar= categorical x-axis variable
2424
2525
*---------- optional parameters ----------;
2626
27+
completecases= whether or not to require non-missing yvar at all xvar values
28+
valid values: yes/no.
29+
default: yes.
30+
2731
outlib= library in which to save NODES and LINKS datasets
2832
default is the WORK library
2933
@@ -44,6 +48,7 @@ xvarord= sort order for x-axis conversion, in a comma separated list
4448
,subject=
4549
,yvar=
4650
,xvar=
51+
,completecases=
4752
,outlib=work
4853
,yvarord=
4954
,xvarord=
@@ -84,8 +89,8 @@ xvarord= sort order for x-axis conversion, in a comma separated list
8489

8590
%let _dataexist = %sysfunc(exist(&data));
8691
%if &_dataexist = 0 %then %do;
87-
%put RawToSankey -> DATASET [&data] DOES NOT EXIST;
88-
%put RawToSankey -> THE MACRO WILL STOP EXECUTING.;
92+
%put %str(W)ARNING: RawToSankey -> DATASET [&data] DOES NOT EXIST;
93+
%put %str(W)ARNING: RawToSankey -> THE MACRO WILL STOP EXECUTING.;
8994
%return;
9095
%end;
9196

@@ -104,20 +109,20 @@ xvarord= sort order for x-axis conversion, in a comma separated list
104109
%mend varexist;
105110

106111
%if %varexist(&data,&subject) = 0 %then %do;
107-
%put RawToSankey -> VARIABLE [&subject] DOES NOT EXIST;
108-
%put RawToSankey -> THE MACRO WILL STOP EXECUTING.;
112+
%put %str(W)ARNING: RawToSankey -> VARIABLE [&subject] DOES NOT EXIST;
113+
%put %str(W)ARNING: RawToSankey -> THE MACRO WILL STOP EXECUTING.;
109114
%return;
110115
%end;
111116

112117
%if %varexist(&data,&yvar) = 0 %then %do;
113-
%put RawToSankey -> VARIABLE [&yvar] DOES NOT EXIST;
114-
%put RawToSankey -> THE MACRO WILL STOP EXECUTING.;
118+
%put %str(W)ARNING: RawToSankey -> VARIABLE [&yvar] DOES NOT EXIST;
119+
%put %str(W)ARNING: RawToSankey -> THE MACRO WILL STOP EXECUTING.;
115120
%return;
116121
%end;
117122

118123
%if %varexist(&data,&xvar) = 0 %then %do;
119-
%put RawToSankey -> VARIABLE [&xvar] DOES NOT EXIST;
120-
%put RawToSankey -> THE MACRO WILL STOP EXECUTING.;
124+
%put %str(W)ARNING: RawToSankey -> VARIABLE [&xvar] DOES NOT EXIST;
125+
%put %str(W)ARNING: RawToSankey -> THE MACRO WILL STOP EXECUTING.;
121126
%return;
122127
%end;
123128

@@ -126,7 +131,9 @@ xvarord= sort order for x-axis conversion, in a comma separated list
126131

127132
data _nodes00;
128133
set &data;
129-
where not missing(&yvar);
134+
%if &completecases = yes %then %do;
135+
where not missing(&yvar);
136+
%end;
130137
run;
131138

132139

@@ -317,9 +324,9 @@ xvarord= sort order for x-axis conversion, in a comma separated list
317324
%*---------- same number of values ----------;
318325

319326
%if &n_yvarord ne &n_yvar %then %do;
320-
%put RawToSankey -> NUMBER OF yvarord= VALUES [&n_yvarord];
321-
%put RawToSankey -> DOES NOT MATCH NUMBER OF yvar= VALUES [&n_yvar];
322-
%put RawToSankey -> THE MACRO WILL STOP EXECUTING.;
327+
%put %str(W)ARNING: RawToSankey -> NUMBER OF yvarord= VALUES [&n_yvarord];
328+
%put %str(W)ARNING: RawToSankey -> DOES NOT MATCH NUMBER OF yvar= VALUES [&n_yvar];
329+
%put %str(W)ARNING: RawToSankey -> THE MACRO WILL STOP EXECUTING.;
323330
%return;
324331
%end;
325332

@@ -360,16 +367,16 @@ xvarord= sort order for x-axis conversion, in a comma separated list
360367
run;
361368

362369
%if &_badyvar eq 1 %then %do;
363-
%put RawToSankey -> VALUE WAS FOUND IN yvarord= [&_yvarordlist];
364-
%put RawToSankey -> THAT IS NOT IN yvar= [&_yvarlist];
365-
%put RawToSankey -> THE MACRO WILL STOP EXECUTING.;
370+
%put %str(W)ARNING: RawToSankey -> VALUE WAS FOUND IN yvarord= [&_yvarordlist];
371+
%put %str(W)ARNING: RawToSankey -> THAT IS NOT IN yvar= [&_yvarlist];
372+
%put %str(W)ARNING: RawToSankey -> THE MACRO WILL STOP EXECUTING.;
366373
%return;
367374
%end;
368375

369376
%if &_badyvar eq 2 %then %do;
370-
%put RawToSankey -> VALUE WAS FOUND IN yvar= [&_yvarlist];
371-
%put RawToSankey -> THAT IS NOT IN yvarord= [&_yvarordlist];
372-
%put RawToSankey -> THE MACRO WILL STOP EXECUTING.;
377+
%put %str(W)ARNING: RawToSankey -> VALUE WAS FOUND IN yvar= [&_yvarlist];
378+
%put %str(W)ARNING: RawToSankey -> THAT IS NOT IN yvarord= [&_yvarordlist];
379+
%put %str(W)ARNING: RawToSankey -> THE MACRO WILL STOP EXECUTING.;
373380
%return;
374381
%end;
375382

@@ -382,9 +389,9 @@ xvarord= sort order for x-axis conversion, in a comma separated list
382389
%*---------- same number of values ----------;
383390

384391
%if &n_xvarord ne &n_xvar %then %do;
385-
%put RawToSankey -> NUMBER OF xvarord= VALUES [&n_xvarord];
386-
%put RawToSankey -> DOES NOT MATCH NUMBER OF xvar= VALUES [&n_xvar];
387-
%put RawToSankey -> THE MACRO WILL STOP EXECUTING.;
392+
%put %str(W)ARNING: RawToSankey -> NUMBER OF xvarord= VALUES [&n_xvarord];
393+
%put %str(W)ARNING: RawToSankey -> DOES NOT MATCH NUMBER OF xvar= VALUES [&n_xvar];
394+
%put %str(W)ARNING: RawToSankey -> THE MACRO WILL STOP EXECUTING.;
388395
%return;
389396
%end;
390397

@@ -425,16 +432,16 @@ xvarord= sort order for x-axis conversion, in a comma separated list
425432
run;
426433

427434
%if &_badxvar eq 1 %then %do;
428-
%put RawToSankey -> VALUE WAS FOUND IN xvarord= [&_xvarordlist];
429-
%put RawToSankey -> THAT IS NOT IN xvar= [&_xvarlist];
430-
%put RawToSankey -> THE MACRO WILL STOP EXECUTING.;
435+
%put %str(W)ARNING: RawToSankey -> VALUE WAS FOUND IN xvarord= [&_xvarordlist];
436+
%put %str(W)ARNING: RawToSankey -> THAT IS NOT IN xvar= [&_xvarlist];
437+
%put %str(W)ARNING: RawToSankey -> THE MACRO WILL STOP EXECUTING.;
431438
%return;
432439
%end;
433440

434441
%if &_badxvar eq 2 %then %do;
435-
%put RawToSankey -> VALUE WAS FOUND IN xvar= [&_xvarlist];
436-
%put RawToSankey -> THAT IS NOT IN xvarord= [&_xvarordlist];
437-
%put RawToSankey -> THE MACRO WILL STOP EXECUTING.;
442+
%put %str(W)ARNING: RawToSankey -> VALUE WAS FOUND IN xvar= [&_xvarlist];
443+
%put %str(W)ARNING: RawToSankey -> THAT IS NOT IN xvarord= [&_xvarordlist];
444+
%put %str(W)ARNING: RawToSankey -> THE MACRO WILL STOP EXECUTING.;
438445
%return;
439446
%end;
440447

@@ -458,7 +465,6 @@ xvarord= sort order for x-axis conversion, in a comma separated list
458465
%end;
459466
run;
460467

461-
462468
%*---------- enumerate xvar values ----------;
463469

464470
proc sort data=_nodes10 out=_nodes15;
@@ -473,8 +479,7 @@ xvarord= sort order for x-axis conversion, in a comma separated list
473479
%end;
474480
run;
475481

476-
477-
%*---------- keep only complete cases ----------;
482+
%*---------- subset if doing complete cases ----------;
478483

479484
proc sql noprint;
480485
select max(x)
@@ -488,11 +493,30 @@ xvarord= sort order for x-axis conversion, in a comma separated list
488493
create table _nodes30 as
489494
select *
490495
from _nodes20
491-
group by &subject
492-
having count(*) eq &xmax
496+
%if &completecases eq yes %then
497+
group by &subject
498+
having count(*) eq &xmax
499+
;
493500
;
494501
quit;
495502

503+
%*---------- count subjects in case not doing complete cases ----------;
504+
505+
%global subject_n;
506+
507+
proc sql noprint;
508+
select count(distinct &subject)
509+
into :subject_n
510+
%if &completecases eq yes %then
511+
from _nodes30
512+
;
513+
%if &completecases eq no %then
514+
from _nodes10
515+
;
516+
;
517+
%put &=subject_n;
518+
quit;
519+
496520

497521
%*-----------------------------------------------------------------------------------------;
498522
%*---------- transform raw data to nodes structure ----------;
@@ -558,9 +582,13 @@ xvarord= sort order for x-axis conversion, in a comma separated list
558582
%*--------------------------------------------------------------------------------;
559583

560584

561-
proc datasets library=work nolist;
562-
delete _nodes: _links:;
563-
run; quit;
585+
%if &debug eq no %then %do;
586+
587+
proc datasets library=work nolist;
588+
delete _nodes: _links:;
589+
run; quit;
590+
591+
%end;
564592

565593

566594
%*---------- return code ----------;

0 commit comments

Comments
 (0)