home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / bit / listserv / sasl / 3957 < prev    next >
Encoding:
Text File  |  1992-08-29  |  2.6 KB  |  55 lines

  1. Comments: Gated by NETNEWS@AUVM.AMERICAN.EDU
  2. Path: sparky!uunet!paladin.american.edu!auvm!CUNYVM.BITNET!FXTBB
  3. Message-ID: <SAS-L%92082914054137@UGA.CC.UGA.EDU>
  4. Newsgroups: bit.listserv.sas-l
  5. Date:         Sat, 29 Aug 1992 13:20:31 EDT
  6. Reply-To:     Philip Tejera <FXTBB@CUNYVM.BITNET>
  7. Sender:       "SAS(r) Discussion" <SAS-L@UGA.BITNET>
  8. From:         Philip Tejera <FXTBB@CUNYVM.BITNET>
  9. Subject:      Re: Duplicate records - IML approach
  10. Lines: 43
  11.  
  12. As Tom Abernathy indicated in his posting, the Sort approach only works
  13. if it is possible to sort by ALL the variables. Even if this is possible,
  14. (and it turned out it sometimes is not) this could get expensive for a
  15. goodly number of variables with a large number of cases. So I decided to
  16. try an IML data-processing approach, and it turns out to be fairly easy.
  17.  
  18. Of course, I had to make some assumptions. For simplicity, I assumed that
  19. the dataset was already sorted on a few fields that should result in
  20. unique cases (obviously they really don't, or there wouldn't be any
  21. duplicates). Also for simplicity, I assumed that the variables were
  22. all numeric, although character variables could be dealt with also if
  23. I had the manuals at home and more time to spend. I used the ANY function
  24. to determine if the differences between adjacent records were zero,
  25. although it would be easy to substitute one's own definition of difference
  26. using IML's operators and/or functions. Finally, for sure there must be
  27. some limitations on how big a dataset will fit in memory, but given the
  28. memory capacities of modern operating systems this shouldn't be too serious.
  29. So here is a simple example that works. Have fun improving it! For instance,
  30. it should be easy to implement Phil Gallagher's suggestion to also print
  31. out observations with duplicate keys but different data values.
  32.  
  33. data first;                             /* set up some sample data   */
  34.   input id1 id2 a b c;
  35. cards;
  36. 01 11 101 201 301
  37. 01 12 102 202 302
  38. 02 11 101 201 301
  39. 02 11 101 201 301
  40. 02 12 102 202 302
  41. 03 12 102 202 302
  42. ;
  43. proc iml;
  44.   use first;                            /* assume already sorted     */
  45.   read all into zed;                    /* zed assumed numeric matrix*/
  46.   nr=nrow(zed)-1;                       /* number of rows for base   */
  47.   nv=1:ncol(zed);                       /* index vector for all vars */
  48.   do i=1 to nr;                         /* i is base obs - OLD       */
  49.      j=i+1;                             /* j is next obs - NEW       */
  50.      old=zed[i,nv];
  51.      new=zed[j,nv];
  52.      anydiff=any(new-old);              /* any non-zero differences? */
  53.      if anydiff = 0 then print j new;   /* print obs. num & values   */
  54.   end;
  55.