Statalist The Stata Listserver


[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

Re: st: creating unique identifier values


From   Suzy <[email protected]>
To   [email protected]
Subject   Re: st: creating unique identifier values
Date   Thu, 09 Mar 2006 10:30:24 -0500

Thank you all for the coding information! I appreciate it immensely.

I should have qualified my request for "unique identifiers" since for this variable (obs) - it isn't strictly necessary (although it would be nice). I do have a true unique identifier id (1-910) which is ordered 1-910 by subject 1-26/attribute 1-35. The obs var will only be used to keep additional track of manual input of binary values (0's and 1's) from printouts - eg. I'll know for example that id#600 = obs 213 and is probably subject #21 attribute#3 and not subject #2 attribute #13. I'm certain that this might be considered a very silly and/or inefficent way to keep track, but so far it seems quick and dirty for so much manual input of data. We can identify which printout, which subject, which attribute... at a glance.

Creating obs as a string variable seems the overall best approach for our specific purposes as recommended by Nick and shown below.

Although we aren't allowed to overindulge/say too much on statalist outside the specified question, I do want to add how much easier and pleasant it makes life for those of us without a hint of computer logic/programming knowledge or understanding. To have such patient, willing, able, and expert help often within moments is a beautiful thing!!

Thanks again!
Suzy


Nick Cox wrote:


This can also easily be modified to meet Richard's comment. For example,
gen x = string(x1) + "_" + string(x2))
is such that "2_11" can be distinguished from "21_1".
Nick [email protected]
Nick Cox



Noting Richard Williams' caveat, and just
focusing on the question, it can also be done without loops:
set obs `=26 * 35' egen x2= seq(), to(35) egen x1= seq(), block(35) gen x = real(string(x1) + string(x2))
-egen- haters can do it without any interpreted
code:
set obs `=26 * 35' gen x1 = ceil(_n/35) gen x2 = 1 + mod(_n-1, 35) gen x = real(string(x1) + string(x2))
and that could be telescoped further.

*
* 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/





*
*   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/



© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index