Re: loop and do repeat problem with thousands of unique values to insert

Posted by David Marso on
URL: http://spssx-discussion.165.s1.nabble.com/loop-and-do-repeat-problem-with-thousands-of-unique-values-to-insert-tp4268902p4269934.html

"or perhaps one big fat recode."
  RECODE would be the way to go rather than all those IF statements!
----------------------
That would likely work.  Kind of reminds me (in spirit)  of the "old school" syntax generation/include  code I first inflicted upon the world in the early 90's ;-)
recap  (may be wrong in details, but basic idea is as follows....
Since my version doesn't support Python ...In all likelihood this approach (using python) will be more efficient than the wholesale butchery , the match and aggregate mop-up of the file I suggested previously.

For historical reference only!  Can you believe this actually works (sort of ;-))))
OTOH:  I believe we have grown beyond it.
---------------------------------------------
GET FILE "REFERENCEMappingFILE".
DO IF $CASENUM=1.
WRITE OUTFILE 'OMG I cant believe Im posting this.txt'
   /"RECODE var01 TO var14 ".
END IF.
WRITE OUTFILE 'OMG I cant believe Im posting this.txt'
   /"  ("," '",strval,"'=", numvalue,")" .
DO IF $CASENUM=1.
WRITE OUTFILE 'OMG I cant believe Im posting this.txt'
   /"  INTO  newvar01 TO newvar14 ".
END IF.
Similar gobblygook for VALUE LABELS.
EXE.
GET FILE "bigfatfile".
INCLUDE  'OMG I cant believe Im posting this.txt'.
(or INSERT if that floats your boat more steady)....



Albert-Jan Roskam wrote
Hi Maurice,

I'd store all the char-to-num translations of your reference file into one
Python dictionary and generate spss syntax based on that. It could be a long
list of IF statements, or perhaps one big fat recode.

I can help you with that if you want. I don't have spss on my laptop though, so
just let me know.Here's a first sketch:


import spss
cursor = spss.Cursor([0:2]). # char var and num codes in first and second column
mytable = dict([rec for rec in cursor.fetchall()])  # this may not be entirely
correct
cursor.close()
recode = "recode myvar "
for ch, num in mytable.iteritems():
  recode += "('%s'=%d) "
spss.Submit(recode + ".\nexe.")

 Cheers!!
Albert-Jan


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
All right, but apart from the sanitation, the medicine, education, wine, public
order, irrigation, roads, a fresh water system, and public health, what have the
Romans ever done for us?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




________________________________
From: Bruce Weaver <bruce.weaver@hotmail.com>
To: SPSSX-L@LISTSERV.UGA.EDU
Sent: Tue, March 29, 2011 1:08:51 PM
Subject: Re: [SPSSX-L] loop and do repeat problem with thousands of unique              
values to              insert

Hi Maurice.  Does AUTORECODE with /GROUP give you what you want?

AUTORECODE VARIABLES=name1 to name14
  /INTO newname1 to newname14
  /GROUP.



Maurice Vergeer wrote:
>
> dear fellow list visitors,
>
> please help me with this problem.
> I have the following syntax which works perfectly.
>
> It 'replaces' strings in old variables (name1 to name14) into
> numerical ones in a new variable (newname1 to newname14).
>
> example:
> vector name=name1 to name14.
> vector newname(14).
> loop i=1 to 14.
> do repeat a=&quot;alpha&quot; &quot;beta&quot; &quot;gamma&quot; / b=1 2
> 3.
> - if name(i) = a newname(i)=b.
> end repeat print.
> end loop.
>
>
> However, instead of three values (alpha beta and gamma) I have
> thousands of unique string values stored in a separate system file,
> each identified with a unique numerical code.
> How can I insert these values in the do repeat function (after 'a='
> and after 'b=')?
>
> The reason why I want to change these from string to numeric ones is
> that I know the system file will be smaller and hopefully also faster
> to read.
>
> You help is much appreciated.
>
> sincerely
> Maurice
>
>
>
>
> --
> ___________________________________________________________________
> Maurice Vergeer
> Department of communication, Radboud University�  (www.ru.nl)
> PO Box 9104, NL-6500 HE Nijmegen, The Netherlands
>
> Visiting Professor Yeungnam University, Gyeongsan, South Korea
>
> Recent publications:
> -Vergeer, M., Hermans, L., &amp; Sams, S. (accepted for publication).
> Online social networks and micro-blogging in political campaigning:
> The exploration of a new campaign tool and a new campaign style. Party
> Politics.
> -Eisinga, R., Franses, Ph.H., &amp; Vergeer, M. (2010). Weather conditions
> and daily television use in the Netherlands, 1996–2005. International
> Journal of Meteorology.
>
> Webspace
> www.mauricevergeer.nl
> http://blog.mauricevergeer.nl/
> www.journalisteninhetdigitaletijdperk.nl
> maurice.vergeer (skype)
> ___________________________________________________________________
>
> =====================
> To manage your subscription to SPSSX-L, send a message to
> LISTSERV@LISTSERV.UGA.EDU (not to SPSSX-L), with no body text except the
> command. To leave the list, send the command
> SIGNOFF SPSSX-L
> For a list of commands to manage subscriptions, send the command
> INFO REFCARD
>


-----
--
Bruce Weaver
bweaver@lakeheadu.ca
http://sites.google.com/a/lakeheadu.ca/bweaver/

"When all else fails, RTFM."

NOTE: My Hotmail account is not monitored regularly.
To send me an e-mail, please use the address shown above.

--
View this message in context:
http://spssx-discussion.1045642.n5.nabble.com/loop-and-do-repeat-problem-with-thousands-of-unique-values-to-insert-tp4268902p4269185.html

Sent from the SPSSX Discussion mailing list archive at Nabble.com.

=====================
To manage your subscription to SPSSX-L, send a message to
LISTSERV@LISTSERV.UGA.EDU (not to SPSSX-L), with no body text except the
command. To leave the list, send the command
SIGNOFF SPSSX-L
For a list of commands to manage subscriptions, send the command
INFO REFCARD
Please reply to the list and not to my personal email.
Those desiring my consulting or training services please feel free to email me.
---
"Nolite dare sanctum canibus neque mittatis margaritas vestras ante porcos ne forte conculcent eas pedibus suis."
Cum es damnatorum possederunt porcos iens ut salire off sanguinum cliff in abyssum?"