|
From: | Nanci Avitable |
Subject: | Re: Define macro |
Date: | Fri, 17 Jan 2025 11:20:08 -0700 |
User-agent: | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 |
Those are good suggestions.
Nanci, can you attach the syntax file, please?
On Fri, Jan 17, 2025 at 9:53 AM Frans Houweling <fhouweling@email.it> wrote:
Could it have to do with line endings or long lines, or character encoding (like utf-32 instead of utf-8)? That is what "1.215-1.225" (row 1 columns 215 to 225) and
| ^~~~~~~~~~~
suggest to me.
On 1/17/25 18:31, Nanci Avitable wrote:
I'm afraid there might be something else going on which may have to do with the fact that this is actually an intel based program and I'm running it on a Mac silicon with Rosetta 2 installed. Rosetta is what enables silicon Macs to run intell programs, theoretically. I've also had the program crash several times. Thanks -- Nanci
Anyhow doing as you suggest gets the following output:
/Users/nanciavitable/Cloud-drive/Private Practice/Scoring&Report/ABASIII/ABASmacro.sps:1.215-1.225: error: DEFINE: Syntax error expecting macro body or !ENDDEFINE.
1 | define !subscore3 (!pos !tokens(1)/!pos !enclose('(',')')/!pos !tokens(1))
!LET !limits = !2
!DO !ssc = 1 !TO 19
!LET !limit = !HEAD(!limits)
!LET !limits = !TAIL(!limits)
if (!1 ge !limit) !3 = !ssc.
!DOEND
!enddefine.
!subscore3 ctraw (0 10 14 18 22 26 30 34 38 42 46 49 52 55 58 62 65 100 100) ct.
LIST.
| ^~~~~~~~~~~
define !subscore3 (!pos !tokens(1)/!pos !enclose('(',')')/!pos !tokens(1))
!LET !limits = !2
!DO !ssc = 1 !TO 19
!LET !limit = !HEAD(!limits)
!LET !limits = !TAIL(!limits)
if (!1 ge !limit) !3 = !ssc.
!DOEND
!enddefine.
!subscore3 ctraw (0 10 14 18 22 26 30 34 38 42 46 49 52 55 58 62 65 100 100) ct.
LIST.
On 1/16/25 3:16 PM, fhouweling@email.it wrote:
Don't worry about the DATA LIST: just replace the define.. !enddefine part in your syntax. The DATA LIST and what follows was just there to show the macro works.
Il 16 gen 2025 23:05, Nanci Avitable <avitabile@aaahawk.com> ha scritto:
Frans,
Thank you. I suspected that there might be a problem with Do Repeat.
I have tried your syntax, but it is not working as expected. I wonder if there is a difference in the PSPP programs we are using. Mine did not like the Data List Free and when I removed that it said there was an error with IF parsing the _expression_. I will play with this some more now that I know Do Repeat could be a problem.
On 1/16/25 1:29 PM, Frans Houweling wrote:
I'm afraid DO REPEAT does not work well inside DEFINE. Here is a workaround:
define !subscore3 (!pos !tokens(1)/!pos !enclose('(',')')/!pos !tokens(1))
!LET !limits = !2
!DO !ssc = 1 !TO 19
!LET !limit = !HEAD(!limits)
!LET !limits = !TAIL(!limits)
if (!1 ge !limit) !3 = !ssc.
!DOEND
!enddefine.
I put an exclamation point before subscore3 to distinguish it from your original.DATA LIST FREE /ctraw.
BEGIN DATA
63
END DATA.
!subscore33 ctraw (0 10 14 18 22 26 30 34 38 42 46 49 52 55 58 62 65 100 100) ct.
LIST.
Data List
+-----+-----+
|ctraw| ct |
+-----+-----+
|63.00|16.00|
+-----+-----+
HTH, frans
On 1/15/25 19:33, Nanci Avitable wrote:
I am working on a new MacBookPro, M4 chip with Sequoia. I have downloaded and installed the PSPP version 2.0.1-2 bundle.
I have several SPSS programs that I use to score some protocols and output information for use in WORD via mail merge.
These programs include Define routines. Although the information I've read indicates that they should transfer okay, I'm running into problems. It may be that I don't fully understand when to use periods and things like "+". Below is a syntax portion that I've been trying to get to run. The actual program is around 1300 lines long so I'm just focusing on a small bit.
My interpretation from the error messages is that there is something wrong with the "if" statement. Unless the problem is that Do Repeat cannot be used in a macro body.
Thanks for whatever information you can give me about using Define properly. -- Nanci
Data list / ctraw cutraw fatraw sltraw hstraw ltraw sctraw sdtraw straw (9f3).
Begin data.
45 37 52 52 42 35 54 43 46
end data.
set Printback on.
set mprint yes.
define subscore3 (!pos !tokens(1)/!pos !enclose('(',')')/!pos !tokens(1))
do repeat ssc = 1 to 19/limit = !2.
if (!1 ge limit) !3 = ssc.
end repeat.
!enddefine.
do repeat ssc = 1 to 19 / limit = 0 10 14 18 22 26 30 34 38 42 46 49 52 55 58 62 65 100 100.
if(ctraw ge limit)ct = ssc.
end repeat.
/Users/nanciavitable/Cloud-drive/Private Practice/Scoring&Report/ABASIII/ABASmacro.sps:7.1-7.78: error: DO REPEAT: In syntax expanded from `subscore3 ctraw (0 10 14 18 22 26 30 34 38 42 46 49 52 55 58...': Syntax error expecting END REPEAT.
7 | subscore3 ctraw (0 10 14 18 22 26 30 34 38 42 46 49 52 55 58 62 65 100 100) ct.
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/nanciavitable/Cloud-drive/Private Practice/Scoring&Report/ABASIII/ABASmacro.sps:7.1-7.78: error: END REPEAT: In syntax expanded from `subscore3 ctraw (0 10 14 18 22 26 30 34 38 42 46 49 52 55 58...': No matching DO REPEAT.
7 | subscore3 ctraw (0 10 14 18 22 26 30 34 38 42 46 49 52 55 58 62 65 100 100) ct.
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
subscore3 ctraw (0 10 14 18 22 26 30 34 38 42 46 49 52 55 58 62 65 100 100) ct.
Workaround.sps
Description: Text document
[Prev in Thread] | Current Thread | [Next in Thread] |