pspp-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Define macro


From: Nanci Avitable
Subject: Re: Define macro
Date: Fri, 17 Jan 2025 10:31:52 -0700
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:78.0) Gecko/20100101 Thunderbird/78.14.0

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.







reply via email to

[Prev in Thread] Current Thread [Next in Thread]