## st: RE: RE: summing up digits and comparing to a check digit

The limitations of the -mod()- function given fractional parts are indeed important. FWIW, Tom Steichen and I wrote this up at

http://www.stata.com/support/faqs/data/mod.html

I was presupposing manipulations of integers only, as the context implies.

Nick n.j.cox@durham.ac.uk

Richard Atkins > Rather than use the mod function I would recommend converting all your > values to formatted strings using the =string(varname, format) command > prior to extracting the digits. > > In general the mod function works well but I have come across datasets > where values that displayed in tables and lists as (for example) 0.7 > produced a '6' when I tried to extract the 'tenths' digit using > mod(int(varname*10),10). It turned out that the floating point > representation of this value in the dta file was actually > 0.69999999 so > the mod function gave me exactly what I asked for rather than what I > actually wanted. > > Some examples of extracting digits in this way are available in my > digit preference functions at > http://www.richardatkins.co.uk/statistics/statabits.htm > >>> n.j.cox@durham.ac.uk 03/15/06 3:04 pm >>> > -pnrcheck- from SSC covers the Swedish case. > > In this case, look _inside_ the program > for some ideas. String functions are not > the only way. -mod()- is also useful. > > The authors of -pnrcheck- are two Italians > and a Welshman, just who you would expect > to be working on Swedish identifiers. > > Nick > n.j.cox@durham.ac.uk > > Lia Orfei > > > I have a variable that contains 7-digit numbers; the first > > digit is the > > remainder of the sum of the last six digits divided by 10 > > (check digit) > > > > example: 1030332 => 0+3+0+3+3+2=11/10=1+1 => check digit=1 > > 12050457 => 0+5+0+4+5+7=21/10=2+1 => check digit=1 > > and so on. > > > > Now I want to assess whther the check digit is correct for each > entry. > > > > How do I calculate the partial sum of the contents of this variable? > > > > Extra challenge: some of the numbers sum up to 10, 20 etc so > > the check > > digit is actually 0 and it does not appear in the data for > > some reason > > (example 50456 is correct becasue 5+0+4+5+6=20 so the remainder is > 0). > > > > Any ideas?? I was thinking about using the string functions.

* * For searches and help try: * http://www.stata.com/support/faqs/res/findit.html * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/

Tag: