* Некоторые команды не принимают списки переменных в виде "var1 TO xyz5". * Этот макрос возвращает список всех переменных, расположенных в файле данных между двумя заданными переменными.. * Макрос чрезвычайно полезен, если вы имеете дело с сотнями переменных. * Из-за некоторых особенностей обработчика макросов имена переменных иногда требуется заключать в кавычки. Это делает отдельный макрос qlist1 (см. ниже). * Автор: Raynald Levesque rlevesque@videotron.ca, 24.03.2001. *///////////////////////////////////////. DEFINE !DefList (var1=!TOKENS(1) /var2=!TOKENS(1) /fname=!CMDEND) GET FILE=!fname. COMPUTE dummy=1. N OF CASES 1. MATCH FILES FILE=* /BY dummy /KEEP=!var1 TO !var2. FLIP. COMPUTE dummy=1. MATCH FILES FILE=* /BY dummy /FIRST=first /LAST=last. DO IF first. WRITE OUTFILE='c:\\temp\\list1.sps' / 'DEFINE !list1()' case_lbl. WRITE OUTFILE='c:\\temp\\qlist1.sps' / 'DEFINE !qlist1()"' case_lbl'"'. ELSE if not last. WRITE OUTFILE='c:\\temp\\list1.sps' / " "case_lbl. WRITE OUTFILE='c:\\temp\\qlist1.sps' / " '"case_lbl"'". ELSE. WRITE OUTFILE='c:\\temp\\list1.sps' /" "case_lbl ' !ENDDEFINE'. WRITE OUTFILE='c:\\temp\\qlist1.sps' /" '"case_lbl"'" ' !ENDDEFINE'. END IF. EXECUTE. GET FILE=!fname. INCLUDE FILE='c:\\temp\\list1.sps'. * qlist1 это то же самое, что и list1, но с закавыченными именами переменных. INCLUDE FILE='c:\\temp\\qlist1.sps'. !ENDDEFINE. *///////////////////////////////////////. * Использование синтаксиса. Предположим, есть 600 последовательно расположенных числовых переменных, между которыми не встречаются строковые. * Здесь для демонстрации работы я использую лишь 5 переменных. * Допустим, нам необходимо округлить значения каждой переменной до ближайшего целого и сменить формат на F8.0. DATA LIST LIST /g x345 v3 b k. BEGIN DATA. 1.21 2.49 3.01 5.51 41.98 2.33 5.67 1.75 4.22 6.02 END DATA. SAVE OUTFILE='c:\\temp\\mydata.sav'. EXECUTE. SET MPRINT=yes. * Следующий код выполняет эту работу. !DEfList var1=g var2=k fname="c:\\temp\\mydata.sav". DO REPEAT v=!list1. COMPUTE v=RND(v). FORMATS v(F8.0). END REPEAT PRINT. EXECUTE.