- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
You need to merge the data and the limits. To help do that, use all integer values for the limits. You need to make changes in three places:
1) In the IML program, there is a definition of 'n' as
n = T( do(minN, maxN, (maxN-minN)/20) );
Replace that line with all possible trials:
n = T(minN:maxN);
2) Merge the data and the computed limits:
/* merge data with proportions */
data Adoptions; merge Adoptions Stats; run;
/* merge control limits */
proc sort data=Adoptions; by Trials; run;
data Funnel;
merge Adoptions(rename=(Trials=N)) Limits;
by N;
Label = Authority;
if L3sd <= Proportion <= U3sd then Label=""; /* delete if w/in +/- 3*sigma */
run;
3) Change the SCATTER statement to
scatter x=N y=Proportion / datalabel=Label;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
For each observation, you can tell whether it is outside of the 95% confidence interval. Create a label variable that is missing for points inside the CI and .has nonmissing values for points outside the CI, as shown in the article "Label only certain observations with PROC SGPLOT."
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Hi @Rick_SAS
Thanks for the reply - I actually spent quite a bit of time yesterday working thourhg that blog, as I figured it was the easiest thing to do. Where I'm stumped is in the "Funnel" dataset, we have "Authority", "Events", Trials", "Proportion", and "Expected"; then, rows 144 - 164 (in the same dataset) have "N", "L3sd", "L2sd", "U2sd", and "U3sd". If I understand correctly, what I need to do is match the number of events for the individual authority (for example, Halton has n=20) with the closest N (in my case, probably N=26) so that i can get the lower/upper CI of 0.435 and 0.956. Where I'm getting stuck is figuring out how to do this; I tried splitting the tables into 2 and then doing a join in SQL but couldn't get it to work.
Based on the article you linked to, here's my result based on Proportion <=0.5 and Proportion >=0.95. This works fine for the N<=60 or so, but because the Proportions drop (and therefore the CIs get narrower), this does not work for the right side of the graph. What I'd like is all the points above the upper red line and below the lower red line to be labelled.
Thanks again for your help. I'm hoping I have explained this clearly - I'm multi-tasking (trying to do work and this at the same time :-)).
Chris
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
You need to merge the data and the limits. To help do that, use all integer values for the limits. You need to make changes in three places:
1) In the IML program, there is a definition of 'n' as
n = T( do(minN, maxN, (maxN-minN)/20) );
Replace that line with all possible trials:
n = T(minN:maxN);
2) Merge the data and the computed limits:
/* merge data with proportions */
data Adoptions; merge Adoptions Stats; run;
/* merge control limits */
proc sort data=Adoptions; by Trials; run;
data Funnel;
merge Adoptions(rename=(Trials=N)) Limits;
by N;
Label = Authority;
if L3sd <= Proportion <= U3sd then Label=""; /* delete if w/in +/- 3*sigma */
run;
3) Change the SCATTER statement to
scatter x=N y=Proportion / datalabel=Label;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
thanks Rick - that was perfect and I actually think I understand what you did 🙂
Have a great evening
Chris
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Although simple, tt's a bit of overkill to have 'n' contain all integers. The important thing is that it contains all the trial values in the data, as well as enough evenly spaced values to visualize the funnel. Then you can do the merge, rather than interpolate.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
thanks for the further explanation. definitely one of the cooler analyses I've worked on in a while!
Chris