1. This is dataplot macro   DEXCP.DP        latest update: 9/25/18
2. Purpose: Generate a DEX contour plot
3.          (= step 10 of the DEXPLOT.DP 10-step DEX analysis procedure)
4. Date: May 2005 ==> 1/26/15 ==> 2/23/15 => 9/25/18
5. 9/25/18: insert logic for vertical and horizontal factors for the k >= 10 case
6.
7. Input
8.    1. k (parameter)               = Total number of plot factors
9.    2. y (vector)                  = Response variable
10.    3. x1, x2, x3, . . . (vectors) = Factors
11.    4. ycont (vector)              = Desired contour line values (optional) (default = auto)
12.
13.    5. contourh (parameter) = factor id for #1 dominant (=> horizontal axis) (optional) (default = automatic)
14.    6. contourv (parameter) = factor id for #2 dominant (=> vertical   axis) (optional) (default = automatic)
15.    7. ncent    (parameter) = number of center point values (if existent)    (optional) (default = 0)
16.    8. meancent (parameter) = mean of center point values (if existent)      (optional) (default = not exist)
17.    9. sdcent (parameter) = sd of center point values (if existent)      (optional) (default = not exist)
18.
19.    9. confdone (parameter) = 0,1 switch defining whether effects & confounding have been computed or not (optional)
20.
21.   10. framet (parameter)          = top    frame line (in %) (optional) (default = 90)
22.   11. frameb (parameter)          = bottom frame line (in %) (optional) (default = 20)
23.   12. dpmean (parameter)       = number of decimal places for the mean
24.   13. dpcont (parameter) = number of dec. places for the corner means (optional) (def. = 3)
25.   14. qual   (string)    = a subset/except qualification
26. Output:
27.    A contour plot
28.
29. -----start point-----
30.
31feedback save
32feedback off
33printing off
34let bugswcp = 0
35. let pausesw = 1
36.
37if bugswcp = 1; print " "; print "--At beginning of DEX Step 10 (DEXCP.DP)"
38   print "contourh contourv = ^contourh ^contourv"
39   print "meancent ncent = ^meancent ^ncent"
40   print "confdone = ^confdone"
41   print "steft1 steft2 = ^steft1 ^steft2"
42   if pausesw = 1; pause; end if
43   . feedback on
44end if
45.
46. -------------------------------------------
47. -----Do Analysis Ste p 10: Contour Plot-----
48. -------------------------------------------
49.
50x3label
51.
52. -----Step 1.1: Check for missing input values-----
53.
54if bugswcp = 1; print "--At (dexcp.dp, step 1.1): check input"
55   if pausesw = 1; pause; end if
56end if
57.
58let string stmacro = dexcp.dp
59if k not exist
60   call determine_k.dp
61end if
62set check name output filliben
63set check length output filliben
64feedback on
65let iflag = check name k y x1 to x^k
66let iflag = check equal length y x1 to x^k
67feedback off
68.
69. -----Step 1.2: Since dexcp.dp will use center points for validation (if they
70.                have center points), extract such center points here-----
71.
72if bugswcp = 1; print "--At (dexcp.dp, step 1.2): extract center points"
73   if pausesw = 1; pause; end if
74end if
75.
76. print tagcent tagjunk
77. pause
78call extract_center_points.dp
79.
80. -----Step 1.3: Copy the user's original y and x1 to xk data out to file-----
81.                since y and x1 to xk may potentially be modified within this macro-----
82.
83if bugswcp = 1; print "--At (dexcp.dp, step 1.3): save original data"
84   if pausesw = 1; pause; end if
85end if
86.
87set write format 40f15.7
88write dex_original_data.dat y x1 to x^k
89set write format
90.
91. -----Step 1.4: Check/Extract 2 levels, and map into -1 and +1-----
92.                For this macro to work, the number of levels must be 1 or 2,
93.                and the 2 levels must be -1 and +1.  Check for this (and fix, if need be).-----
94.                If not 2 levels, then only the min and max will be used herein.-----
95.                If not -1 and +1, then min => -1 and max => +1-----
96.
97if bugswcp = 1; print "--At (dexcp.dp, step 1.4): normalize to (-1,+1)"
98   if pausesw = 1; pause; end if
99end if
100.
101let string stcall = dexcp.dp
102call check_and_fix_original_data_for_2_levels_and_m1_p1.dp
103.
104. -----Step 2: Define plot settings-----
105.
106if bugswcp = 1; print "--At (dexcp.dp, step 2): plot settings"
107   if pausesw = 1; pause; end if
108end if
109.
110call dexplotinit.dp
111.
112. -----Step 3: Compute effect estimates (ordered) and confounding-----
113.
114if bugswcp = 1; print "--At (dexcp.dp, step 3): confounding"
115   print "confsw = ^confsw"
116   if pausesw = 1; pause; end if
117end if
118.
119call compute_effect_estimates_and_confounding.dp
120.
121if bugswcp = 1; print "--At end of step 3 of dexcp.dp"
122   print "numeff = ^numeff"
123   loop for jzz = 1 1 numeff
124      print steft^jzz
125   end loop
126   if pausesw = 1; pause; end if
127end if
128.
129. -----Step 4: Extract the ID of the most important factor-----
130.
131if bugswcp = 1; print "--At (dexcp.dp, step 4): id of most imp. factor"
132   if pausesw = 1; pause; end if
133end if
134.
135. let effhor = effid1(1)
136let effhor = ^steft1
137let string ch = ^effhor
138let posint = ^ch
139. call digit.dp      ;. replaced by digits command + sdigit macro   1/26/15
140let digitv = digits posint
141let numdigit = number digitv
142call sdigit.dp
143.
144let numdig1 = numdigit
145.
146let d1 = digitv(1)
147if numdig1 >= 2; let d2 = digitv(2); end if
148.
149if bugswcp = 1
150   print effid1 effid2
151   print effhor
152   print digitv
153   print numdig1
154   print posint
155   print d1
156   if pausesw = 1; pause; end if
157end if
158.
159. -----Step 5: Extract the ID of the second most important factor-----
160.
161if bugswcp = 1; print "--At (dexcp.dp, step 5): id of 2nd most imp. factor"
162   if pausesw = 1; pause; end if
163end if
164.
165. let effvert = effid1(2)
166let effvert = ^steft2
167let string ch = ^effvert
168let posint = ^ch
169. call digit.dp      ;. replaced by digits command + sdigit macro   1/26/15
170let digitv = digits posint
171let numdigit = number digitv
172call sdigit.dp
173let numdig2 = numdigit
174let d3 = digitv(1)
175if numdig2 >= 2; let d4 = digitv(2); end if
176.
177if bugswcp = 1
178   print effvert
179   print digitv
180   print numdig2
181   print posint
182   print d1 d2 d3 d4
183   if pausesw = 1; pause; end if
184end if
185.
186. -----Step 6: Determine the ID (1 to k) (= hit1) for the vertical axis factor
187. -----        and (= hit2) for the horizontal axis factor.-----
188. -----        Also, form the 2 vert and horiz vectors u1 and u2-----
189.
190if bugswcp = 1; print "--At (dexcp.dp, step 6): factor id for vert. axis"
191   if pausesw = 1; pause; end if
192end if
193.
194if contourh not exist and contourv not exist
195   if bugswcp = 1
196      print "k = ^k"
197      print numdig1 numdig2
198      if d1 exists; print d1; end if
199      if d2 exists; print d2; end if
200      if d3 exists; print d3; end if
201      if d4 exists; print d4; end if
202   end if
203   .
204   let trace = 0
205   .
206   . ---Step 6.1: Treat the k <= 9 (= 1-digit) case-----
207   .
208   if bugswcp = 1; print "--At (dexcp.dp, step 6.1): test for k <= 9 case"
209      if pausesw = 1; pause; end if
210   end if
211   .
212   if k <= 9
213      .
214      if bugswcp = 1
215         print "dexcpd.dp: at beginning of treating the k <= 9 case"
216         print "k = ^k"
217         print numdig1 numdig2
218         print d1 d2 d3 d4
219         if ibatch not exist or ibatch = 0; pause; end if
220      end if
221      .
222      if numdig1 = 1; if numdig2 = 1
223         let hit1 = d1; let hit2 = d3
224         let trace = 9.1
225      end if; end if
226      .
227      if numdig1 = 1; if numdig2 >= 2
228         let hit1 = d1; let hit2 = d3
229         if d1 = d3; let hit1 = d1; let hit2 = d4; end if
230         if d1 = d4; let hit1 = d1; let hit2 = d3; end if
231         let trace = 9.2
232      end if; end if
233      .
234      if numdig1 >= 2; if numdig2 = 1
235         let hit1 = d1; let hit2 = d2
236         if d1 = d3; let hit1 = d1; let hit2 = d2; end if
237         if d2 = d3; let hit1 = d2; let hit2 = d1; end if
238         let trace = 9.3
239      end if; end if
240      .
241      if numdig1 >= 2; if numdig2 >= 2
242         let hit1 = d1; let hit2 = d2
243         if d1 = d3; let hit1 = d1; let hit2 = d2; end if
244         if d1 = d4; let hit1 = d1; let hit2 = d2; end if
245         if d2 = d3; let hit1 = d2; let hit2 = d1; end if
246         if d2 = d4; let hit1 = d2; let hit2 = d1; end if
247         let trace = 9.4
248      end if; end if
249      .
250      let u1 = x^hit1
251      let u2 = x^hit2
252      .
253      if bugswcp = 1
254         print "dexcp.dp: at end of treating the k <= 9 case"
255         print "k = ^k"
256         print prod12 prod34
257         print u1 u2
258         if ibatch not exist or ibatch = 0; pause; end if
259      end if
260   end if
261   .
262   if bugswcp = 1;
263      print "--At end of step 6 of dexcp.dp"
264      print "trace = ^trace"
265      if pausesw = 1; pause; end if
266   end if
267   .
268   . ---Step 6.2: Treat the k >= 10 (= 2-digit) case-----
269   .
270   if bugswcp = 1; print "--At (dexcp.dp, step 6.2): test for k >= 10 case"
271      if pausesw = 1; pause; end if
272   end if
273   .
274   if k >= 10
275      if bugswcp = 1
276         print "dexcpd.dp: at beginning of treating the k >= 10 case"
277         print "k = ^k"
278         print numdig1 numdig2
279         print d1 d2 d3 d4
280         if ibatch not exist or ibatch = 0; pause; end if
281      end if
282      .
283      if numdig1 = 1; if numdig2 = 1
284         let hit1 = d1; let hit2 = d3
285         let trace = 10.1
286      end if; end if
287      .
288      if numdig1 = 1; if numdig2 >= 2
289         let prod34 = 10*d3 + d4
290         if prod34 > k ;. hence word2 = a 2-term interaction
291            let hit1 = d1; let hit2 = d3
292            if d1 = d3; let hit1 = d1; let hit2 = d4; end if
293            if d1 = d4; let hit1 = d1; let hit2 = d3; end if
294         end if
295         if prod34 <= k ;. hence assume word2 = a single 2-digit factor
296            let hit1 = d1; let hit2 = prod34
297         end if
298         let trace = 10.2
299      end if; end if
300      .
301      if numdig1 >= 2; if numdig2 = 1
302         let prod12 = 10*d1 + d2
303         if prod12 > k ;. hence word1 = a 2-term interaction
304            let hit1 = d1; let hit2 = d2
305            if d1 = d3; let hit1 = d1; let hit2 = d2; end if
306            if d2 = d3; let hit1 = d2; let hit2 = d1; end if
307         end if
308         if prod12 <= k ;. hence assume word1 = a single 2-digit factor
309            let hit1 = prod12; let hit2 = d3
310         end if
311         let trace = 10.3
312      end if; end if
313      .
314      if numdig1 >= 2; if numdig2 >= 2
315         let prod12 = 10*d1 + d2
316         let prod34 = 10*d3 + d4
317         if prod12 > k; if prod34 > k ;. thus both words are 2-term interactions
318            let hit1 = d1; let hit2 = d2
319            if d1 = d3; let hit1 = d1; let hit2 = d2; end if
320            if d1 = d4; let hit1 = d1; let hit2 = d2; end if
321            if d2 = d3; let hit1 = d2; let hit2 = d1; end if
322            if d2 = d4; let hit1 = d2; let hit2 = d1; end if
323            let trace = 10.41
324            . print "hit1 hit2 = ^hit1 ^hit2"
325            . pause
326         end if; end if
327         .
328         if prod12 > k; if prod34 <= k ;. thus word 1 = 2TI & word 2 = 2-digit factor
329            let hit1 = d1; let hit2 = d2
330            let trace = 10.42
331         end if; end if
332         .
333         if prod12 <= k; if prod34 > k ;. thus word 1 = 2-digit factor & word2 = 2TI
334            let hit1 = 10*d1 + d2; let hit2 = d3
335            let trace = 10.43
336         end if; end if
337         .
338         if prod12 <= k; if prod34 <= k ;. thus word 1 and word 2 both = 2-digit factors
339            let hit1 = 10*d1 + d2; let hit2 = 10*d3 + d4
340            let trace = 10.44
341         end if; end if
342      end if; end if
343      .
344      let u1 = x^hit1
345      let u2 = x^hit2
346      .
347      if bugswcp = 1
348         print "dexcp.dp: at end of treating the k >= 10 case"
349         print "k = ^k"
350         print prod12 prod34
351         print hit1 hit2
352         print "trace = ^trace"
353         print u1 u2
354         if ibatch not exist or ibatch = 0; pause; end if
355      end if
356   end if
357end if
358.
359if contourh exists and contourv exists
360   let hit1 = contourh
361   let hit2 = contourv
362   let numdig1 = 1
363   let numdig2 = 1
364   let u1 = x^hit1
365   let u2 = x^hit2
366end if
367.
368if bugswcp = 1; print "--At end of step 6 of dexcp.dp"
369   print contourv contourh numdig1 numdig2 hit1 hit2
370   if pausesw = 1; pause; end if
371end if
372.
373. -----Step 7: Print out the subtitle immediately above the plot-----
374.
375if bugswcp = 1; print "--At (dexcp.dp, step 7): subtitle above plot"
376   if pausesw = 1; pause; end if
377end if
378.
379title: Contour Plot of 2 Dominant Factors: X^hit1 & X^hit2
380.
381if cx^hit1 exist and cx^hit2 exist
382   title: Contour Plot of 2 Dominant Factors: X^hit1 (^cx^hit1) & X^hit2 (^cx^hit2)
383end if
384.
385if cx^hit1 not exist and cx^hit2 not exist
386   if stx^hit1 exist and stx^hit2 exist
387      title: Contour Plot of 2 Dominant Factors: X^hit1 (^stx^hit1) & X^hit2 (^stx^hit2)
388   end if
389end if
390.
391. -----Step 8: Determine axis labels for the upcoming contour plot-----
392.
393if bugswcp = 1; print "--At (dexcp.dp, step 8): axis labels"
394   if pausesw = 1; pause; end if
395end if
396.
397. let bugswcp = 1
398. feedback on
399. echo on
400.
401if stx^hit2 exist
402   y1label X^hit2(^stx^hit2)
403   if cx^hit2 exist
404      y1label X^hit2(^cx^hit2)
405   end if
406else
407   y1label X^hit2
408   if cx^hit2 exist
409      y1label X^hit2(^cx^hit2)
410   end if
411end if
412.
413if stx^hit1 exist
414   x1label X^hit1(^stx^hit1)
415   if cx^hit1 exist
416      x1label X^hit1(^cx^hit1)
417   end if
418else
419   x1label X^hit1
420   if cx^hit1 exist
421      x1label X^hit1(^cx^hit1)
422   end if
423end if
424.
425. -----Step 9: Determine contour line values-----
426.
427. call determine_contour_line_values.dp
428. print ycont
429. pause
430.
431. -----Step 10: GENERATE THE PLOT-----
432.
433if bugswcp = 1; print "--At (dexcp.dp, step 10): GENERATE THE PLOT"
434   if pausesw = 1; pause; end if
435end if
436.
437label size labelsiz
438tic label size ticlabsi
439. print "labelsiz = ^labelsiz, ticlabsi = ^ticlabsi"
440. pause
441.
442if dpcp exists; let dpcont = dpcp; end if
443.                <========================================
444call dexcont.dp
445.                <========================================
446.
447. -----Step 11: Write out the contour line values-----
448.
449if bugswcp = 1; print "--At (dexcp.dp, step 11): Write contour line values"
450   if pausesw = 1; pause; end if
451end if
452.
453delete valcl tagcl numcl
454skip 0
455read dpst1f.dat valcl tagcl numcl
456. print tagcl valcl numcl
457. pause
458.
459retain xplot yplot tagplot subset yplot -2 to 2
460print junk1.out xplot yplot tagplot
461retain xplot yplot tagplot subset xplot -2 1.95
462print junk2.out xplot yplot tagplot
463. print xplot yplot tagplot
464. pause
465.
466let nxplot = number xplot
467. print "nxplot = ^nxplot"
468hw 2 1
469loop for jz = 1 1 nxplot
470   let xpj = xplot(jz)
471   let ypj = yplot(jz)
472   let tagpj = tagplot(jz)
473   delete junkv; let junkv = valcl
474   retain junkv subset tagcl tagpj
475   let cvj = junkv(1)
476   . print jz xpj ypj tagpj cvj
477   . pause
478   if xpj = -2; just lece; end if
479   if xpj = 1.95; just rice; end if
480   movedd xpj ypj; text ^cvj
481end loop
482.
483. -----Step 12: For the horizontal axis, write out the real values at -2 -1 0 1 2-----
484.
485if bugswcp = 1; print "--At (dexcp.dp, step 12): horiz. axis: -1 -1 0 1 2"
486   if pausesw = 1; pause; end if
487end if
488.
489if colorall exists; color ^colorall; end if
490.
491if stx1l1 exists
492   delete stjunka stjunkb
493   let string stjunka = stx^hit1&l1
494   let string out1 = ^^stjunka
495   if nlevv exist; let upperz = nlevv(^hit1); end if
496   if nlevv not exist; let upperz = number of words stx^hit1&l; end if
497   let string stjunkb = stx^hit1&l^upperz
498   let string out2 = ^stjunkb
499end if
500.
501if stx1l exists
502   delete stjunka stjunkb
503   let stjunka = string word   stx^hit1&l  1
504   let string out1 = ^stjunka
505   if nlevv exist; let upperz = nlevv(^hit1); end if
506   if nlevv not exist; let upperz = number of words stx^hit1&l; end if
507   let stjunkb = string word   stx^hit1&l  upperz
508   let string out2 = ^stjunkb
509end if
510.
511if stx1l exists
512   let string staxissw = h
513   call dexcp_write_augmented_tic_labels.dp
514end if
515.
516. -----Step 12: For the vertical axis, write out the real values at -2 -1 0 1 2-----
517.
518if bugswcp = 1; print "--At (dexcp.dp, step 12): vert. axis: -2 -1 0 1 2"
519   if pausesw = 1; pause; end if
520end if
521.
522if stx1l1 exists
523   delete stjunka stjunkb
524   let string stjunka = stx^hit2&l1
525   let string out1 = ^^stjunk
526   if nlevv exist; let upperz = nlevv(^hit2); end if
527   if nlevv not exist; let upperz = number of words stx^hit2&l; end if
528   let string stjunkb = stx^hit2&l^upperz
529   let string out2 = ^stjunkb
530end if
531.
532if stx1l exists
533   delete stjunka stjunkb
534   let stjunka = string word   stx^hit2&l  1
535   let string out1 = ^stjunka
536   if nlevv exist; let upperz = nlevv(^hit2); end if
537   if nlevv not exist; let upperz = number of words stx^hit2&l; end if
538   let stjunkb = string word   stx^hit2&l  upperz
539   let string out2 = ^stjunkb
540end if
541.
542if stx1l exists
543   let string staxissw = v
544   call dexcp_write_augmented_tic_labels.dp
545end if
546.
547. -----Step 13: Write out the model-based center-point predicted value in bottom margin of the plot
548.
549if bugswcp = 1; print "--At (dexcp.dp, step 13): write center point pred value"
550   if pausesw = 1; pause; end if
551end if
552.
553let ybar = mean y
554let dpmeanz = 4
555if dpmean exists; let dpmeanz = dpmean; end if
556set write decimals dpmeanz; let ybarr = number to string ybar
557hw texth textw
558move 50 07; just center; text Center-Point Predicted Value (From 2-Factor Edge-based Model) = ^ybarr
559.
560. -----Step 14: If center point data exists, then print out the mean value---
561.               and carry out a t test. if have 2 or more replicates-----
562.               Needed: ncent, meancent, sdcent-----
563.
564if bugswcp = 1; print "--At (dexcp.dp, step 14): if cp exists, write comparison"
565   if pausesw = 1; pause; end if
566end if
567.
568if ycent exists
569   let ncent = number ycent
570   let meancent = mean ycent
571   let sdcent = sd ycent
572   let meancenr = number to string meancent
573   let sdcentr = number to string sdcent
574   .
575   if ncent = 1
576      move 50 05; just center; text Center Point Data: # Obs. = ^ncent, Mean = ^meancenr
577   end if
578   .
579   if ncent > 1.5
580      if colorall exists; color ^colorall; end if
581      move 50 05; just center; text Center Point Data: # Obs. = ^ncent, Mean = ^meancenr, SD(data) = ^sdcentr
582   end if
583   .
584   if ncent > 1.5 and sdcent > 0
585      let num = meancent - ybar
586      let num = abs(numer)
587      let denom = (1/(ncent**2)) + (1/(n**2))
588      let denom = sdcent*sqrt(denom)
589      let tcent = num/denom
590      let tcent = abs(tcent)
591      let tcentr = round(tcent,2)
592      let dfcent = ncent-1
593      let tcutoff = tppf(0.975,dfcent)
594      let tcutoffr = round(tcutoff,2)
595      let string tconclus = Model is Adequate
596      if tcent > tcutoff; let string tconclus = Model Not Adequate; end if
597      move 15 01; just left; text t Test of Model Adequacy at Center Point:
598      move 47 01; just left; text |t stat| = ^tcentr   tcutoff = ^tcutoffr   Conclusion = ^tconclus
599   end if; end if
600end if
601.
602. -----Step 15: Write out project, (k,n), Step, annotate-----
603.
604if bugswcp = 1; print "--At (dexcp.dp, step 15): proj,(k,n),step,annotate"
605   if pausesw = 1; pause; end if
606end if
607.
608if project exists
609   if projcol exists; color ^projcol; end if
610   call dexwriteproject.dp
611end if
612.
613if step exists
614   let step = step + 1; hw 2 1; just left; move 5 95
615   . text Step ^step
616   . call tagcorn.dp   9/17/18/
617   if stepprsw not exist
618      call tagcorn.dp
619   end if
620   if stepprsw exists; if stepprsw = 1
621      call tagcorn.dp
622   end if; end if
623end if
624.
625if step exists
626   call tagcorn.dp
627end if
628.
629if annotate exists; if annotate = 1
630   if colorall exists; color ^colorall; end if
631   call annotate.dp
632end if; end if
633.
634. -----Step 16: write out upper left----
635.
636if bugswcp = 1; print "--At (dexcp.dp, step 16): upper left"
637   if pausesw = 1; pause; end if
638end if
639.
640if stcorn1 exists
641   call upperleft.dp
642end if
643.
644. -----Step 17: Write out right margin factor and setting info-----
645.
646if bugswcp = 1; print "--At (dexcp.dp, step 17): right margin"
647   if pausesw = 1; pause; end if
648end if
649.
650if rightmsw exists and rightmsw = 1 or rightmsw not exist
651   if stx1 exists and stx1l exists
652      call dexrightmargin.dp
653   end if
654end if
655.
656. -----Step 98: Restore the user's original y and x1 to xk data from file-----
657.
658if bugswcp = 1; print " "; print "---At (dexcp.dp, step 98): restore orig. data (pre-restore)"
659   print y x1 to x^k
660   if pausesw = 1; pause; end if
661end if
662.
663delete y x1 to x^k
664set read format 40f15.7
665skip 0; read dex_original_data.dat y x1 to x^k
666set read format
667.
668if bugswcp = 1; print " "; print "---At (dexcp.dp, step 98): (post-restore)"
669   print y x1 to x^k
670   if pausesw = 1; pause; end if
671end if
672.
673. -----Step 31: Form conclusions and write out to file-----
674.
675let step = 10
676call form_and_write_dex_10_step_conclusions.dp
677
678. -----Step 99: Finish up-----
679.
680if bugswcp = 1; print " "; print "---At end of dexcp.dp"
681   if pausesw = 1; pause; end if
682end if
683.
684just center
685title
686y1label
687x1label
688char hw 2 1 all
689char offset 0 0 all
690char justification cece all
691.
692delete digitv junkvar dxz
693.
694feedback restore
695.
696if itime exists and itime = 1
697   cpu time
698   let t10 = cputime
699   set write decimals 4
700   print t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
701   let tdiff1 = t1 - t0
702   loop for jz = 1 1 10
703       let jz2 = jz - 1
704       let tdiff^jz = t^jz - t^jz2
705   end of loop
706   print tdiff1 tdiff2 tdiff3 tdiff4 tdiff5 tdiff6 tdiff7 tdiff8 tdiff9 tdiff10
707end if
708.
709