Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Donald Spady <dspady@ualberta.ca> |
To | statalist@hsphsun2.harvard.edu |
Subject | Re: st: Extracting numbers from code |
Date | Mon, 12 Nov 2012 11:46:47 -0700 |
Daniel Don't jump on Sanja. I wrote her privately because used Statalist to responded initially to her request; however, I never saw my response to her on the Statalist, so I wrote her privately to ensure she got my comment (as to whether or not it was useful is up to her). For some reason, when I reply on Statalist (not often) I never see my response. When I submit a new request, no problem. Don On 2012-11-12, at 10:21 AM, daniel klein <klein.daniel.81@gmail.com> wrote: > Sanja, > > it is very important to reply to the list, not write its members > private messages. One reason for this is, that what you do not > undestand, others might also find hard to understand, and they will > benefit from an public answer. This motivates me more to put extra > effort into an explanation of my code. Second, you get a chance others > look at my code or modifications, too. In this case this is crucial, > because my code still does not do the job! > > I will start with an explanation of what the code does. > > The first logical expression > > substr(strofreal(item), 1, 1) == "1" > > checks whether the first character in <item> is a "1" or not. It > returns "true" (1) if it is, "false" (0) if not. See -help string > functions- for this. The problem is, that there might be respondents > who checked items 10 or 11 only. These respondents will be coded as if > the had checked item 1, even though this is not the case. The line > > !(inlist(substr(strofreal(item), 2, 1), "0", "1")) > > therefore checks, whether the second character in <item> correspoonds > to a "0" (as is the case for 10) or "1" (as is the case for 11). See > -help inlist()- for this. The idea is/was not falsly to code those who > checked either 10 or 11 as if they had checked item 1. > > However, as should be evident, this code does not work either. For > those who did not only check item 1, but also item 10, or 11, or both, > the variable <item> will take the values 110, 111, or 11011. With the > above logic, neither of these cases will be coded correctly, because > the second character in <item> is a "0" or a "1" in any case. Now, I > have an ugly work-around for this. It will (probably) work, but it is > an ad-hoc fix, and not very general. Try > > g byte dummy1 = (substr(strofreal(item), 1, 1) == "1") & /// > (cond((strlen(strofreal(item)) < 3), /// > cond(!(inlist(substr(strofreal(item), 2, 1)), "0", "1"), 1, 0), 1)) > > See -help cond()- for this. > > Best > Daniel > -- > Hi Daniel. > I just wanted to thank you very much for the answers you just sent me > on the statalist! They work great!!!! This will save me SO much time. > If you have a second, could you explain what the second line of code > does? If not, no problem > !(inlist(substr(strofreal(item), 2, 1), "0", "1")) > Thank you again! > * > * For searches and help try: > * http://www.stata.com/help.cgi?search > * http://www.stata.com/support/faqs/resources/statalist-faq/ > * http://www.ats.ucla.edu/stat/stata/ > Donald Spady -- dspady@ualberta.ca * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/faqs/resources/statalist-faq/ * http://www.ats.ucla.edu/stat/stata/