Решение номер: 23953. Создано 7 марта 2002 года. Вопрос: вывод графика функции, заданной пользователем. Описание вопроса: можно ли с помощью SPSS построить график функции, заданной пользователем? Предмет вопроса: SPSS может лишь отображать данные из файла, функции рисовать не может. Описание решения: Действительно, SPSS может только отображать данные. Однако, макрос "fnplot", приведённый ниже, может сгенерировать необходимые данные согласно функции, заданной пользователем и затем отобразить их. Сохраните открытый файл данных перед запуском макроса, так как рабочий файл будет заменён. Макрос позволяет пользователю: * задать любое выражение, допустимое через команду COMPUTE в качестве уравнения отображаемой функции; * задать минимум и максимум аргумента x; * задать число наблюдений для отображения на графике; * задать имена для переменной-аргумента и переменной, содержащей значения функции. Во-первых, сохраните макрос из конца этого файла в файл с именем Fnplot.sps. Загрузите макрос в память SPSS: Это может быть сделано двумя способами. Либо откройте файл в окне синтаксиса и выполните команду меню Run->All и закройте окно синтаксиса (чтобы избежать случайных изменений файла), либо используйте команду INCLUDE как это показано ниже. Запустите макрос: Когда макрос будет загружен в память, вы можете запускать его из окна синтаксиса SPSS столько раз, сколько потребуется. Откройте окно синтаксиса, запишите команду вызова макроса и используйте меню Run для запуска макроса. Пример того, как можно использовать INCLUDE для загрузки макроса и несколько вариантов его запуска приводятся ниже. * Загружаем макрос FNPLOT через INCLUDE. * Измените путь к файлу с макросом, если необходимо. INCLUDE 'C:\\Program Files\\SPSS\\Fnplot.sps' . * Пример вызова макроса fnplot. * Перед выполнением этих команд, сохраните "тело" макроса в файл fnplot.sps.. * . fnplot . fnplot 'x ** 2 '. fnplot "sin(x)" . fnplot 'sin(theta)' /varname='theta' . fnplot 'sin(theta)' /varname='theta' /cases=1001 /min=0 /max=6.283 /fnname=sin . fnplot 'pdf.normal(x,0,1)' /cases=1001 /min=-3 /max=3 /fnname=z . *. *. * То, что ниже, следует сохранить в файл Fnplot.sps' .................................. * . DEFINE fnplot (!POSITIONAL !DEFAULT('#x') !CHAREND('/') /min = !DEFAULT(0) !CHAREND('/') /max = !DEFAULT(10) !CHAREND('/') /cases = !DEFAULT(101) !CHAREND('/') /varname = !DEFAULT('x') !CHAREND('/') /fnname = !DEFAULT('fn_x') !CHAREND('/') ) . new file. input program. compute #inc = ( !max - !min )/ ( !cases - 1 ) . loop #i = 1 to !cases. + compute #x = !min + (#i - 1) * #inc . + compute !UNQUOTE(!varname) = #x . + compute !UNQUOTE(!fnname) = !UNQUOTE(!1) . + end case. end loop. end file. end input program. variable label !UNQUOTE(!fnname) !QUOTE(!UNQUOTE(!1)) . execute. IGRAPH /VIEWNAME='Function Plot' /X1 = VAR(!UNQUOTE(!varname)) /Y = VAR(!UNQUOTE(!fnname)) /SCATTER COINCIDENT = NONE . !ENDDEFINE .