Hello,
I have a variable in a dataset formatted as following: 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2
2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2; There is 50 items in total, and they are separated by 49 semi-colons. For certain items, they contains multiple responses. I want to calculate how many items was missed before the responses stopped.
I tried to use length(trim(var)) to calculate the length of string, but it only turned out to be the number of responses. It is the same as using CHAR.LENGTH(var). How can I got the number of missing items?
I would appreciate your helps. Sincerely, Jialin |
It looks like adjacent semicolons (;;) mean a missing data value. I think all you need to do is to count pairs of semicolons. Let’s say the that the variable, V, is A150. Compute nmissing=0. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop. >>If you copy this text, make sure the quotes are straight and not curly. I think spss does not like curly. From: SPSSX(r) Discussion [mailto:[hidden email]] On Behalf Of huang jialin Hello, I have a variable in a dataset formatted as following: 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2; There is 50 items in total, and they are separated by 49 semi-colons. For certain items, they contains multiple responses. I want to calculate how many items was missed before the responses stopped. I tried to use length(trim(var)) to calculate the length of string, but it only turned out to be the number of responses. It is the same as using CHAR.LENGTH(var). How can I got the number of missing items? I would appreciate your helps. Sincerely, Jialin |
Hi Gene,
Thanks for your email. There are still two questions needed to be solved. First, if the first item is missing, there is only one semicolon in the beginning of the string. Thus, it may not fit the comparison of pair of semicolons. Second, I do not want to count the missing values when there is no response at all. How can I do it?
Thank you very much. Sincerely, Jialin On Mon, Nov 28, 2011 at 11:42 AM, Gene Maguin <[hidden email]> wrote:
|
Ok, I missed accounting for the situation where the first item is missing. This will do that. Compute nmissing=0. If (substr(V,1,1) eq ‘;’) nmissing=nmissing+1. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop. I don’t know what you mean by this: ‘Second, I do not want to count the missing values when there is no response at all’. How do you tell the difference between a missing value and ‘no response at all’. From: huang jialin [mailto:[hidden email]] Hi Gene, Thanks for your email. There are still two questions needed to be solved. First, if the first item is missing, there is only one semicolon in the beginning of the string. Thus, it may not fit the comparison of pair of semicolons. Second, I do not want to count the missing values when there is no response at all. How can I do it? Thank you very much. Sincerely, Jialin On Mon, Nov 28, 2011 at 11:42 AM, Gene Maguin <[hidden email]> wrote: It looks like adjacent semicolons (;;) mean a missing data value. I think all you need to do is to count pairs of semicolons. Let’s say the that the variable, V, is A150. Compute nmissing=0. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop. >>If you copy this text, make sure the quotes are straight and not curly. I think spss does not like curly. From: SPSSX(r) Discussion [mailto:[hidden email]] On Behalf Of huang jialin Hello, I have a variable in a dataset formatted as following: 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2; There is 50 items in total, and they are separated by 49 semi-colons. For certain items, they contains multiple responses. I want to calculate how many items was missed before the responses stopped. I tried to use length(trim(var)) to calculate the length of string, but it only turned out to be the number of responses. It is the same as using CHAR.LENGTH(var). How can I got the number of missing items? I would appreciate your helps. Sincerely, Jialin |
Hi Gene,
Thanks for your quick response. I will rephrase my question. That is, I only want to count the missing values before the last integer. Am I making sense now? Sorry for the confusion.
Sincerely, Jialin
On Mon, Nov 28, 2011 at 12:08 PM, Gene Maguin <[hidden email]> wrote:
|
In reply to this post by huang jialin
If you have that data as a disk file you can do something like the syntax below which was generated by <file> <read text data>. If you have it as one long string variable, you could parse that string with syntax, or you could write it to a disk file.� You would want to include a case identifier when you write to a .txt file so that you can use that in double checking, matching, etc. If you want to parse a long string you could do something like this. � Copy the string into a working string. Use a loop� to find what precedes a semicolon, use that as a variable,� if it is null put in a user missing value, replace the working string with itself starting with the character after the semicolon The working string keeps getting shorter and shorter.� You may have to specifically handle null contents for v1 and v50. Art Kendall Social Research Consultants GET DATA � /TYPE=TXT � /FILE="C:\project\semisparated.txt" � /DELCASE=LINE � /DELIMITERS=";" � /ARRANGEMENT=DELIMITED � /FIRSTCASE=1 � /IMPORTCASE=ALL � /VARIABLES= � V1 F1.0 � V2 F1.0 � V3 F1.0 � V4 F1.0 � V5 F1.0 � V6 F1.0 � V7 F3.0 � V8 F1.0 � V9 F1.0 � V10 F1.0 � V11 F3.0 � V12 F1.0 � V13 F1.0 � V14 F1.0 � V15 F3.0 � V16 F3.0 � V17 F1.0 � V18 F1.0 � V19 F3.0 � V20 F3.0 � V21 F1.0 � V22 F1.0 � V23 F3.0 � V24 F1.0 � V25 F1.0 � V26 F1.0 � V27 F3.0 � V28 F1.0 � V29 F1.0 � V30 F1.0 � V31 F1.0 � V32 F1.0 � V33 F1.0 � V34 F3.0 � V35 F1.0 � V36 F1.0 � V37 F3.0 � V38 F1.0 � V39 F1.0 � V40 F1.0 � V41 F3.0 � V42 F1.0 � V43 F3.0 � V44 F1.0 � V45 F1.0 � V46 F3.0 � V47 F3.0 � V48 F1.0 � V49 F1.0 � V50 F1.0. CACHE. compute here = nvalid(v1 to v50). count nothere = v1 to v50(SYSMIS, MISSING). formats here nothere (f2). frequencies variables = here nothere. On 11/28/2011 12:23 PM, huang jialin wrote: Hello,===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (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
Art Kendall
Social Research Consultants |
In reply to this post by huang jialin
Are saying that there should be a specific number of
digits in each field? I.e, that there are supposed to be 50
3-digit numbers.
blank blank 1 has two user missing values? blank 1 1 has one user missing value but blank blank blank has a different user missing value Is this a one-time analysis, or is this something you want to use in a production context? Art Kendall Social Research Consultants On 11/28/2011 1:15 PM, huang jialin wrote: Hi Gene,===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (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
Art Kendall
Social Research Consultants |
In reply to this post by huang jialin
Rick Oliver
Senior Information Developer IBM Business Analytics (SPSS) E-mail: [hidden email] ****sample data***. data list list /stringvar (a120). begin data 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2; end data. write outfile='c:\temp\temp.txt' /stringvar. execute. ***real code starts here. just read the original text data file this way***. data list list (";") file='c:\temp\temp.txt' /numvar1 to numvar50. compute numvalid=nvalid(numvar1 to numvar50). execute. From: huang jialin <[hidden email]> To: [hidden email] Date: 11/28/2011 12:19 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Sent by: "SPSSX(r) Discussion" <[hidden email]> Hi Gene, Thanks for your quick response. I will rephrase my question. That is, I only want to count the missing values before the last integer. Am I making sense now? Sorry for the confusion. Sincerely, Jialin On Mon, Nov 28, 2011 at 12:08 PM, Gene Maguin <emaguin@...> wrote: Ok, I missed accounting for the situation where the first item is missing. This will do that.
Compute nmissing=0. If (substr(V,1,1) eq ‘;’) nmissing=nmissing+1. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop.
I don’t know what you mean by this: ‘Second, I do not want to count the missing values when there is no response at all’. How do you tell the difference between a missing value and ‘no response at all’.
From: huang jialin [mailto:huangpsych@...]
Hi Gene,
Thanks for your email. There are still two questions needed to be solved. First, if the first item is missing, there is only one semicolon in the beginning of the string. Thus, it may not fit the comparison of pair of semicolons. Second, I do not want to count the missing values when there is no response at all. How can I do it?
Thank you very much.
Sincerely, Jialin
On Mon, Nov 28, 2011 at 11:42 AM, Gene Maguin <emaguin@...> wrote: It looks like adjacent semicolons (;;) mean a missing data value. I think all you need to do is to count pairs of semicolons. Let’s say the that the variable, V, is A150.
Compute nmissing=0. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop.
>>If you copy this text, make sure the quotes are straight and not curly. I think spss does not like curly.
From: SPSSX(r) Discussion [mailto:[hidden email]]
On Behalf Of huang jialin
Hello,
I have a variable in a dataset formatted as following: 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2;
There is 50 items in total, and they are separated by 49 semi-colons. For certain items, they contains multiple responses. I want to calculate how many items was missed before the responses stopped.
I tried to use length(trim(var)) to calculate the length of string, but it only turned out to be the number of responses. It is the same as using CHAR.LENGTH(var).
How can I got the number of missing items?
I would appreciate your helps.
Sincerely, Jialin
|
In reply to this post by huang jialin
Or are you saying that you do not want to count
trailing missing values?
I.e; up to some point there is one kind of user missing, after the last valid value within a case, you want a different kind of user missing value. E.g., the first kind might mean read but not answered and the second kind might mean stopped reading so that there is no answer. Art Kendall Social Research Consultants On 11/28/2011 1:15 PM, huang jialin wrote: Hi Gene,===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (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
Art Kendall
Social Research Consultants |
Art,
Thanks for your email. I think you are right. I do not want to count trailing missing values. Thanks. Sincerely, Jialin
On Mon, Nov 28, 2011 at 12:57 PM, Art Kendall <[hidden email]> wrote:
|
In reply to this post by Rick Oliver-3
Hi Rick,
Thanks for your response. It is similar to Art's solution. But can I make some modification so that it can remove the trailing missing values? Thanks. Sincerely, Jialin On Mon, Nov 28, 2011 at 12:53 PM, Rick Oliver <[hidden email]> wrote: Rick Oliver |
In reply to this post by huang jialin
Oops. That's not right. never mind.
Rick Oliver Senior Information Developer IBM Business Analytics (SPSS) E-mail: [hidden email] From: Rick Oliver/Chicago/IBM To: huang jialin <[hidden email]> Cc: [hidden email] Date: 11/28/2011 12:53 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Rick Oliver Senior Information Developer IBM Business Analytics (SPSS) E-mail: [hidden email] ****sample data***. data list list /stringvar (a120). begin data 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2; end data. write outfile='c:\temp\temp.txt' /stringvar. execute. ***real code starts here. just read the original text data file this way***. data list list (";") file='c:\temp\temp.txt' /numvar1 to numvar50. compute numvalid=nvalid(numvar1 to numvar50). execute. From: huang jialin <[hidden email]> To: [hidden email] Date: 11/28/2011 12:19 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Sent by: "SPSSX(r) Discussion" <[hidden email]> Hi Gene, Thanks for your quick response. I will rephrase my question. That is, I only want to count the missing values before the last integer. Am I making sense now? Sorry for the confusion. Sincerely, Jialin On Mon, Nov 28, 2011 at 12:08 PM, Gene Maguin <emaguin@...> wrote: Ok, I missed accounting for the situation where the first item is missing. This will do that.
Compute nmissing=0. If (substr(V,1,1) eq ‘;’) nmissing=nmissing+1. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop.
I don’t know what you mean by this: ‘Second, I do not want to count the missing values when there is no response at all’. How do you tell the difference between a missing value and ‘no response at all’.
From: huang jialin [mailto:huangpsych@...]
Hi Gene,
Thanks for your email. There are still two questions needed to be solved. First, if the first item is missing, there is only one semicolon in the beginning of the string. Thus, it may not fit the comparison of pair of semicolons. Second, I do not want to count the missing values when there is no response at all. How can I do it?
Thank you very much.
Sincerely, Jialin
On Mon, Nov 28, 2011 at 11:42 AM, Gene Maguin <emaguin@...> wrote: It looks like adjacent semicolons (;;) mean a missing data value. I think all you need to do is to count pairs of semicolons. Let’s say the that the variable, V, is A150.
Compute nmissing=0. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop.
>>If you copy this text, make sure the quotes are straight and not curly. I think spss does not like curly.
From: SPSSX(r) Discussion [mailto:[hidden email]]
On Behalf Of huang jialin
Hello,
I have a variable in a dataset formatted as following: 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2;
There is 50 items in total, and they are separated by 49 semi-colons. For certain items, they contains multiple responses. I want to calculate how many items was missed before the responses stopped.
I tried to use length(trim(var)) to calculate the length of string, but it only turned out to be the number of responses. It is the same as using CHAR.LENGTH(var).
How can I got the number of missing items?
I would appreciate your helps.
Sincerely, Jialin
|
In reply to this post by Rick Oliver-3
Nice one.� I forgot that one can specify the
delimiter. I can see how to use semicolon, comma, pipe or
most likely any printing character,
is there a way to specify a tab (ctrl-h in ASCII)? Lo and behold!! this works even with 2 specified separators this syntax if for� tilda and x� � but x and X works too. new file. set blanks 0. data list list ("~","x")� file='c:\project\tilda x separated.txt' /numvar1 to numvar3. compute numvalid=nvalid(numvar1 to numvar3). compute ID = $casenum. list /variables = ID numvar1 to numvar3. ----- the data ----- 123x456x789 xxx 123x456x789 123xx 123~456~789 ~~~ 123~456x789 123~x Art Kendall Social Research Consultants On 11/28/2011 1:53 PM, Rick Oliver wrote: Rick Oliver===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (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
Art Kendall
Social Research Consultants |
In reply to this post by huang jialin
Ok, now I understand. So the problem is to find the last numeric value and search the string prior to that position for paired semicolons or a semicolon in position 1. So: String #v(a150). Compute #v=rtrim(V,’;’). Compute nmissing=0. If (substr(#V,1,1) eq ‘;’) nmissing=nmissing+1. Compute #j=char.length(#v). Loop #i=1 to #j. If (substr(#V,#i,2) eq ‘;;’) nmissing=nmissing+1. End loop. Try this out and let me know. Gene Maguin From: huang jialin [mailto:[hidden email]] Hi Gene, Thanks for your quick response. I will rephrase my question. That is, I only want to count the missing values before the last integer. Am I making sense now? Sorry for the confusion. Sincerely, Jialin On Mon, Nov 28, 2011 at 12:08 PM, Gene Maguin <[hidden email]> wrote: Ok, I missed accounting for the situation where the first item is missing. This will do that. Compute nmissing=0. If (substr(V,1,1) eq ‘;’) nmissing=nmissing+1. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop. I don’t know what you mean by this: ‘Second, I do not want to count the missing values when there is no response at all’. How do you tell the difference between a missing value and ‘no response at all’. From: huang jialin [mailto:[hidden email]] Hi Gene, Thanks for your email. There are still two questions needed to be solved. First, if the first item is missing, there is only one semicolon in the beginning of the string. Thus, it may not fit the comparison of pair of semicolons. Second, I do not want to count the missing values when there is no response at all. How can I do it? Thank you very much. Sincerely, Jialin On Mon, Nov 28, 2011 at 11:42 AM, Gene Maguin <[hidden email]> wrote: It looks like adjacent semicolons (;;) mean a missing data value. I think all you need to do is to count pairs of semicolons. Let’s say the that the variable, V, is A150. Compute nmissing=0. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop. >>If you copy this text, make sure the quotes are straight and not curly. I think spss does not like curly. From: SPSSX(r) Discussion [mailto:[hidden email]] On Behalf Of huang jialin Hello, I have a variable in a dataset formatted as following: 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2; There is 50 items in total, and they are separated by 49 semi-colons. For certain items, they contains multiple responses. I want to calculate how many items was missed before the responses stopped. I tried to use length(trim(var)) to calculate the length of string, but it only turned out to be the number of responses. It is the same as using CHAR.LENGTH(var). How can I got the number of missing items? I would appreciate your helps. Sincerely, Jialin |
Or maybe omit everything after the last integer with a rindex function? The same kind of index function can be used to hunt down those respondents who didn't fill out any answer (if rind(v1,'0123456789',1)=0 missings=-999. or whatever value you'd like for them).
data list free/v1(a113). begin data 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2;2 end data. comp missings=subs(v1,1,1)=';'. loop #i=1 to rind(v1,'0123456789',1). if subs(v1,#i,2)=';;' missings=missings+1. end loop. EXECUTE. Date: Mon, 28 Nov 2011 14:57:16 -0500 From: [hidden email] Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons To: [hidden email] Ok, now I understand. So the problem is to find the last numeric value and search the string prior to that position for paired semicolons or a semicolon in position 1. So: String #v(a150). Compute #v=rtrim(V,’;’). Compute nmissing=0. If (substr(#V,1,1) eq ‘;’) nmissing=nmissing+1. Compute #j=char.length(#v). Loop #i=1 to #j. If (substr(#V,#i,2) eq ‘;;’) nmissing=nmissing+1. End loop.
Try this out and let me know.
Gene Maguin
From: huang jialin [mailto:[hidden email]]
Hi Gene,
Thanks for your quick response. I will rephrase my question. That is, I only want to count the missing values before the last integer. Am I making sense now?
Sorry for the confusion.
Sincerely, Jialin On Mon, Nov 28, 2011 at 12:08 PM, Gene Maguin <[hidden email]> wrote: Ok, I missed accounting for the situation where the first item is missing. This will do that.
Compute nmissing=0. If (substr(V,1,1) eq ‘;’) nmissing=nmissing+1. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop.
I don’t know what you mean by this: ‘Second, I do not want to count the missing values when there is no response at all’. How do you tell the difference between a missing value and ‘no response at all’.
From: huang jialin [mailto:[hidden email]]
Hi Gene,
Thanks for your email. There are still two questions needed to be solved. First, if the first item is missing, there is only one semicolon in the beginning of the string. Thus, it may not fit the comparison of pair of semicolons. Second, I do not want to count the missing values when there is no response at all. How can I do it?
Thank you very much.
Sincerely, Jialin
On Mon, Nov 28, 2011 at 11:42 AM, Gene Maguin <[hidden email]> wrote: It looks like adjacent semicolons (;;) mean a missing data value. I think all you need to do is to count pairs of semicolons. Let’s say the that the variable, V, is A150.
Compute nmissing=0. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop.
>>If you copy this text, make sure the quotes are straight and not curly. I think spss does not like curly.
From: SPSSX(r) Discussion [mailto:[hidden email]] On Behalf Of huang jialin
Hello,
I have a variable in a dataset formatted as following: 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2;
There is 50 items in total, and they are separated by 49 semi-colons. For certain items, they contains multiple responses. I want to calculate how many items was missed before the responses stopped.
I tried to use length(trim(var)) to calculate the length of string, but it only turned out to be the number of responses. It is the same as using CHAR.LENGTH(var).
How can I got the number of missing items?
I would appreciate your helps.
Sincerely, Jialin
|
In reply to this post by huang jialin
data list list /stringvar (a120).
begin data 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2; end data. string #temp (a120). compute #temp=replace(stringvar, ";"," "). compute count=0. if char.length(ltrim(#temp))>0 count=1. loop #i=1 to char.length(#temp). if substr(#temp, #i, 1)=' ' count=count+1. end loop. execute. Rick Oliver Senior Information Developer Business Analytics (SPSS) E-mail: [hidden email] From: Rick Oliver/Chicago/IBM To: huang jialin <[hidden email]>, [hidden email] Date: 11/28/2011 01:06 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Oops. That's not right. never mind. Rick Oliver Senior Information Developer IBM Business Analytics (SPSS) E-mail: [hidden email] From: Rick Oliver/Chicago/IBM To: huang jialin <[hidden email]> Cc: [hidden email] Date: 11/28/2011 12:53 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Rick Oliver Senior Information Developer IBM Business Analytics (SPSS) E-mail: [hidden email] ****sample data***. data list list /stringvar (a120). begin data 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2; end data. write outfile='c:\temp\temp.txt' /stringvar. execute. ***real code starts here. just read the original text data file this way***. data list list (";") file='c:\temp\temp.txt' /numvar1 to numvar50. compute numvalid=nvalid(numvar1 to numvar50). execute. From: huang jialin <[hidden email]> To: [hidden email] Date: 11/28/2011 12:19 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Sent by: "SPSSX(r) Discussion" <[hidden email]> Hi Gene, Thanks for your quick response. I will rephrase my question. That is, I only want to count the missing values before the last integer. Am I making sense now? Sorry for the confusion. Sincerely, Jialin On Mon, Nov 28, 2011 at 12:08 PM, Gene Maguin <emaguin@...> wrote: Ok, I missed accounting for the situation where the first item is missing. This will do that.
Compute nmissing=0. If (substr(V,1,1) eq ‘;’) nmissing=nmissing+1. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop.
I don’t know what you mean by this: ‘Second, I do not want to count the missing values when there is no response at all’. How do you tell the difference between a missing value and ‘no response at all’.
From: huang jialin [mailto:huangpsych@...]
Hi Gene,
Thanks for your email. There are still two questions needed to be solved. First, if the first item is missing, there is only one semicolon in the beginning of the string. Thus, it may not fit the comparison of pair of semicolons. Second, I do not want to count the missing values when there is no response at all. How can I do it?
Thank you very much.
Sincerely, Jialin
On Mon, Nov 28, 2011 at 11:42 AM, Gene Maguin <emaguin@...> wrote: It looks like adjacent semicolons (;;) mean a missing data value. I think all you need to do is to count pairs of semicolons. Let’s say the that the variable, V, is A150.
Compute nmissing=0. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop.
>>If you copy this text, make sure the quotes are straight and not curly. I think spss does not like curly.
From: SPSSX(r) Discussion [mailto:[hidden email]]
On Behalf Of huang jialin
Hello,
I have a variable in a dataset formatted as following: 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2;
There is 50 items in total, and they are separated by 49 semi-colons. For certain items, they contains multiple responses. I want to calculate how many items was missed before the responses stopped.
I tried to use length(trim(var)) to calculate the length of string, but it only turned out to be the number of responses. It is the same as using CHAR.LENGTH(var).
How can I got the number of missing items?
I would appreciate your helps.
Sincerely, Jialin
|
Rick,
Thanks for your email. I tried your solution, but it does not do the exact things I want. As some items have multiple responses, the syntax you have break them down and count them separately.
Thank you. Sincerely, Jialin On Mon, Nov 28, 2011 at 3:14 PM, Rick Oliver <[hidden email]> wrote:
|
No, this syntax does not count them separately,
it counts each contiguous sequence of numeric digits as a single value.
Counting them separately would actually be easier.
From: huang jialin <[hidden email]> To: [hidden email] Date: 11/28/2011 03:23 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Sent by: "SPSSX(r) Discussion" <[hidden email]> Rick, Thanks for your email. I tried your solution, but it does not do the exact things I want. As some items have multiple responses, the syntax you have break them down and count them separately. Thank you. Sincerely, Jialin On Mon, Nov 28, 2011 at 3:14 PM, Rick Oliver <oliverr@...> wrote: data list list /stringvar (a120). begin data 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2; end data. string #temp (a120). compute #temp=replace(stringvar, ";"," "). compute count=0. if char.length(ltrim(#temp))>0 count=1. loop #i=1 to char.length(#temp). if substr(#temp, #i, 1)=' ' count=count+1. end loop. execute. Rick Oliver Senior Information Developer Business Analytics (SPSS) E-mail: oliverr@... From: Rick Oliver/Chicago/IBM To: huang jialin <huangpsych@...>, [hidden email] Date: 11/28/2011 01:06 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Oops. That's not right. never mind. Rick Oliver Senior Information Developer IBM Business Analytics (SPSS) E-mail: oliverr@... From: Rick Oliver/Chicago/IBM To: huang jialin <huangpsych@...> Cc: [hidden email] Date: 11/28/2011 12:53 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Rick Oliver Senior Information Developer IBM Business Analytics (SPSS) E-mail: oliverr@... ****sample data***. data list list /stringvar (a120). begin data 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2; end data. write outfile='c:\temp\temp.txt' /stringvar. execute. ***real code starts here. just read the original text data file this way***. data list list (";") file='c:\temp\temp.txt' /numvar1 to numvar50. compute numvalid=nvalid(numvar1 to numvar50). execute. From: huang jialin <huangpsych@...> To: [hidden email] Date: 11/28/2011 12:19 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Sent by: "SPSSX(r) Discussion" <[hidden email]> Hi Gene, Thanks for your quick response. I will rephrase my question. That is, I only want to count the missing values before the last integer. Am I making sense now? Sorry for the confusion. Sincerely, Jialin On Mon, Nov 28, 2011 at 12:08 PM, Gene Maguin <emaguin@...> wrote: Ok, I missed accounting for the situation where the first item is missing. This will do that.
Compute nmissing=0. If (substr(V,1,1) eq ‘;’) nmissing=nmissing+1. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop.
I don’t know what you mean by this: ‘Second, I do not want to count the missing values when there is no response at all’. How do you tell the difference between a missing value and ‘no response at all’.
From: huang jialin [mailto:huangpsych@...]
Hi Gene,
Thanks for your email. There are still two questions needed to be solved. First, if the first item is missing, there is only one semicolon in the beginning of the string. Thus, it may not fit the comparison of pair of semicolons. Second, I do not want to count the missing values when there is no response at all. How can I do it?
Thank you very much.
Sincerely, Jialin
On Mon, Nov 28, 2011 at 11:42 AM, Gene Maguin <emaguin@...> wrote: It looks like adjacent semicolons (;;) mean a missing data value. I think all you need to do is to count pairs of semicolons. Let’s say the that the variable, V, is A150.
Compute nmissing=0. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop.
>>If you copy this text, make sure the quotes are straight and not curly. I think spss does not like curly.
From: SPSSX(r) Discussion [mailto:[hidden email]]
On Behalf Of huang jialin
Hello,
I have a variable in a dataset formatted as following: 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2;
There is 50 items in total, and they are separated by 49 semi-colons. For certain items, they contains multiple responses. I want to calculate how many items was missed before the responses stopped.
I tried to use length(trim(var)) to calculate the length of string, but it only turned out to be the number of responses. It is the same as using CHAR.LENGTH(var).
How can I got the number of missing items?
I would appreciate your helps.
Sincerely, Jialin
|
Hi Rick,
Sorry for misunderstanding. I think you are right. But it includes the missing values in the middle of string, how to count the missing values alone? Thanks. Sincerely, Jialin On Mon, Nov 28, 2011 at 3:43 PM, Rick Oliver <[hidden email]> wrote: No, this syntax does not count them separately, it counts each contiguous sequence of numeric digits as a single value. Counting them separately would actually be easier. |
I guess I misunderstood what you were trying
to accomplish. I thought you wanted to know the point at which they stopped
responding.
What is it that you want? The first solution I sent you returns total missing values. It could be adapted to count missing values prior to the point at which responses stop. Is that what you want? Rick Oliver Senior Information Developer Business Analytics (SPSS) E-mail: [hidden email] From: huang jialin <[hidden email]> To: Rick Oliver/Chicago/IBM@IBMUS Cc: [hidden email] Date: 11/28/2011 03:49 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Hi Rick, Sorry for misunderstanding. I think you are right. But it includes the missing values in the middle of string, how to count the missing values alone? Thanks. Sincerely, Jialin On Mon, Nov 28, 2011 at 3:43 PM, Rick Oliver <oliverr@...> wrote: No, this syntax does not count them separately, it counts each contiguous sequence of numeric digits as a single value. Counting them separately would actually be easier. From: huang jialin <huangpsych@...> To: [hidden email] Date: 11/28/2011 03:23 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Sent by: "SPSSX(r) Discussion" <[hidden email]> Rick, Thanks for your email. I tried your solution, but it does not do the exact things I want. As some items have multiple responses, the syntax you have break them down and count them separately. Thank you. Sincerely, Jialin On Mon, Nov 28, 2011 at 3:14 PM, Rick Oliver <oliverr@...> wrote: data list list /stringvar (a120). begin data 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2; end data. string #temp (a120). compute #temp=replace(stringvar, ";"," "). compute count=0. if char.length(ltrim(#temp))>0 count=1. loop #i=1 to char.length(#temp). if substr(#temp, #i, 1)=' ' count=count+1. end loop. execute. Rick Oliver Senior Information Developer Business Analytics (SPSS) E-mail: oliverr@... From: Rick Oliver/Chicago/IBM To: huang jialin <huangpsych@...>, [hidden email] Date: 11/28/2011 01:06 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Oops. That's not right. never mind. Rick Oliver Senior Information Developer IBM Business Analytics (SPSS) E-mail: oliverr@... From: Rick Oliver/Chicago/IBM To: huang jialin <huangpsych@...> Cc: [hidden email] Date: 11/28/2011 12:53 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Rick Oliver Senior Information Developer IBM Business Analytics (SPSS) E-mail: oliverr@... ****sample data***. data list list /stringvar (a120). begin data 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2; end data. write outfile='c:\temp\temp.txt' /stringvar. execute. ***real code starts here. just read the original text data file this way***. data list list (";") file='c:\temp\temp.txt' /numvar1 to numvar50. compute numvalid=nvalid(numvar1 to numvar50). execute. From: huang jialin <huangpsych@...> To: [hidden email] Date: 11/28/2011 12:19 PM Subject: Re: How to calculate missing values in a string with multiple responses and semi-colons Sent by: "SPSSX(r) Discussion" <[hidden email]> Hi Gene, Thanks for your quick response. I will rephrase my question. That is, I only want to count the missing values before the last integer. Am I making sense now? Sorry for the confusion. Sincerely, Jialin On Mon, Nov 28, 2011 at 12:08 PM, Gene Maguin <emaguin@...> wrote: Ok, I missed accounting for the situation where the first item is missing. This will do that.
Compute nmissing=0. If (substr(V,1,1) eq ‘;’) nmissing=nmissing+1. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop.
I don’t know what you mean by this: ‘Second, I do not want to count the missing values when there is no response at all’. How do you tell the difference between a missing value and ‘no response at all’.
From: huang jialin [mailto:huangpsych@...]
Hi Gene,
Thanks for your email. There are still two questions needed to be solved. First, if the first item is missing, there is only one semicolon in the beginning of the string. Thus, it may not fit the comparison of pair of semicolons. Second, I do not want to count the missing values when there is no response at all. How can I do it?
Thank you very much.
Sincerely, Jialin
On Mon, Nov 28, 2011 at 11:42 AM, Gene Maguin <emaguin@...> wrote: It looks like adjacent semicolons (;;) mean a missing data value. I think all you need to do is to count pairs of semicolons. Let’s say the that the variable, V, is A150.
Compute nmissing=0. Loop #i=1 to 149. Do If (substr(V,#i,2) eq ‘;;’). + compute nmissing=nmissing+1. Else if (substr(V,#i,2) eq ‘ ‘). + break. End if. End loop.
>>If you copy this text, make sure the quotes are straight and not curly. I think spss does not like curly.
From: SPSSX(r) Discussion [mailto:[hidden email]]
On Behalf Of huang jialin
Hello,
I have a variable in a dataset formatted as following: 1;1;5;1;4;3;;;2;2;134;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;5;3;;1;3;145;2;3;;5;5;;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1;3;1;5;1;4;4;2;1;;2;3;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;;3;;1;4;;4;2;3;5;;3;;4;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;5;1;3;1;;1;2;3;;2;2;;3;;;3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3;4;3;1;3;3;145;1;3;5;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;4;1;4;2;1;5;;3;234;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1;1;5;1;4;2;1;1;2;2;234;4;5;4;1;145;2;2;3;125;3;5;1;2;2;5;234;3;2;3;2;2;5;3;4;;135;;4;4;135;;1;2;;234;;;;2 2;4;3;1;3;3;145;2;3;4;2;1;1;3;235;1;3;5;235;3;3;4;125;5;1;2;3;1;2;4;3;5;4;135;3;4;3;2;2;5;1;5;245;2;1;3;124;4;2;
There is 50 items in total, and they are separated by 49 semi-colons. For certain items, they contains multiple responses. I want to calculate how many items was missed before the responses stopped.
I tried to use length(trim(var)) to calculate the length of string, but it only turned out to be the number of responses. It is the same as using CHAR.LENGTH(var).
How can I got the number of missing items?
I would appreciate your helps.
Sincerely, Jialin
|
Free forum by Nabble | Edit this page |