|
If you had V9.2 you could use CMISS funtion.
On 10/28/09, Jack Clark <jclark@hilltop.umbc.edu> wrote:
> Nat,
>
> No, not much response yet. A co-worker suggested trying an array with a
> nested DO loop to compare each array element to those before it. I've
> been playing around with it and my current "solution" is below. For
> ease of checking the output in my sample data, the value of ID is also
> the expected value of the COUNT variable.
>
> I would welcome critique from anyone on the list. Thanks.
>
>
> data have;
> input @01 id $1.
> @03 icn1 $1.
> @05 icn2 $1.
> @07 icn3 $1.
> @09 icn4 $1.
> @11 icn5 $1.
> ;
> cards;
> 1 A A A A A
> 1 A A
> 1 A A
> 2 A A A A B
> 2 A B B B
> 2 B B C
> 3 A B B C
> 3 B C D B
> 4 A B C D
> 4 B B C D E
> 5 A B C D E
> ;
> run;
>
>
> data need;
> set have;
> array icn (5) $ icn1-icn5;
>
> * initialize counter ;
> count = 0;
>
> do i = 1 to dim(icn);
>
> * first array element does not do comparisons ;
> if i = 1 then do;
> if icn(i) ne ' ' then count + 1;
> end;
>
> * subsequent array elements are compared to prior elements ;
> else do;
> notnew = 0;
> if icn(i) ne ' ' then do;
> do j = (i-1) to 1 by -1;
> if icn(i) = icn(j) then notnew + 1;
> end;
> if notnew eq 0 then count + 1;
> end;
> end;
>
> end;
> run;
>
> proc print data = need;
> run;
>
>
>
>
>
>
>
> Jack Clark
> Senior Research Analyst
> phone: 410-455-6256
> fax: 410-455-6850
> jclark@hilltop.umbc.edu -----Original Message-----
> From: Nathaniel Wooding [mailto:nathaniel.wooding@dom.com]
> Sent: Wednesday, October 28, 2009 10:31 AM
> To: Jack Clark
> Subject: RE: Is there a function to count the number of distinct
> non-missing values in an array?
>
> Jack
>
> I have not seen a flood of replies. My typical approach here would be to
> do a transpose.
>
> Nat Wooding
>
> -----Original Message-----
> From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of
> Jack Clark
> Sent: Wednesday, October 28, 2009 8:51 AM
> To: SAS-L@LISTSERV.UGA.EDU
> Subject: Is there a function to count the number of distinct non-missing
> values in an array?
>
> Good morning,
>
>
>
> I have a data set with character variables like var1-var50. Not all
> records have values in all 50 variables. For each record, I would like
> to know the number of distinct, non-missing values across the 50
> variables. My ultimate goal is to have a frequency report of this count
> so I know that x number of obs. in the data set have 1 unique value, y
> number of obs. in the data set have 2 unique values, etc.
>
>
>
> I have thought of switching from my short and wide data set structure to
> a tall and long one (with transpose or data step), then that may make
> counting distinct values easier (maybe with PROC SQL). But I was
> wondering if anyone knows of some clever data step method or array
> function (?) that would work.
>
>
>
> Thanks in advance.
>
>
>
>
> Jack
>
>
>
> Jack Clark
> Senior Research Analyst
> phone: 410-455-6256
> fax: 410-455-6850
> jclark@hilltop.umbc.edu
>
> University of Maryland, Baltimore County
> Sondheim Hall, 3rd Floor
> 1000 Hilltop Circle
> Baltimore, MD 21250
>
>
>
>
> Confidentiality Notice: This e-mail may contain information that is
> legally privileged and that is intended only for the use of the
> addressee(s) named above. If you are not the intended recipient, you are
> hereby notified that any disclosure, copying of this e-mail,
> distribution, or action taken in reliance on the contents of this e-mail
> and/or documents attributed to this e-mail is strictly prohibited. If
> you have received this information in error, please notify the sender
> immediately by phone and delete this entire e-mail. Thank you.
> CONFIDENTIALITY NOTICE: This electronic message contains
> information which may be legally confidential and or privileged and
> does not in any case represent a firm ENERGY COMMODITY bid or offer
> relating thereto which binds the sender without an additional
> express written confirmation to that effect. The information is
> intended solely for the individual or entity named above and access
> by anyone else is unauthorized. If you are not the intended
> recipient, any disclosure, copying, distribution, or use of the
> contents of this information is prohibited and may be unlawful. If
> you have received this electronic transmission in error, please
> reply immediately to the sender that you have received the message
> in error, and delete it. Thank you.
>
|