Разработайте программу в Stata для обработки нескольких файлов в рабочей папке так же, как SAS, используя временный файл.

Я разрабатываю эту оболочку вокруг tempfile в Stata для одновременной обработки нескольких наборов данных без необходимости сохранять их в текущем каталоге. По сути, я хочу, чтобы Stata имитировала SAS, и поэтому программа называется work; исходный код без каких-либо опций и минимальной функциональности. Я придерживаюсь вашего совета не токенизировать и программа работает; однако проблема в том, что как только я вспоминаю временный файл в следующей программе, эта программа (работа) не передает дескриптор следующей программе для вызова временного файла.

код для "работы"

capture program drop work
program define work
version 12.1
syntax [name(id="file name")] [, sort(string) ]
*tokenize namelist
*di "namelist'" 
*if "nol'" !="" | "nol'" !="" | "nolabel'" !="" { 
      * di "``namelist''" 
*} 
tempfile namelist' 
*di "namelist'" 
if "sort'" != "" { 
    sortsort' 
} 
di "File 'namelist'' saved in following temporary work folder" 
save ` namelist''

*di "Now you can use temporary file =namelist'' in your program" 
end

Как только я вызываю временный файл в моем файле do, появляется следующая ошибка:

work Orig File 'Orig' saved in following temporary work folder file C:\Users\saa602\AppData\Local\Temp\ST_00000001.tmp saved

. di "`Orig'"

. use `Orig', replace

invalid file specification

Обратите внимание, что я успешно использовал tempfile для обработки нескольких файлов, особенно после слияния большого количества файлов без каких-либо проблем; однако программа-оболочка с опциями для сортировки и отображения местоположения рабочего каталога была бы очень удобна для всех нас.


person Sartaj Raja    schedule 27.02.2015    source источник
comment
Трудно понять формулировку вашей проблемы, и с учетом предоставленного вами форматирования это также относится и к коду. Пожалуйста, попробуйте перефразировать намеченную цель program проблемы и убедитесь, что код отображается с четким форматированием.   -  person Roberto Ferrer    schedule 27.02.2015
comment
Ваш код действительно нуждается в улучшении. Вы не создали временный рабочий каталог. Вместо этого вы сохраняете в (постоянный) обычный рабочий каталог, последний из которых вы использовали перед запуском Stata или в тот, который вы cdd перед запуском этого. Вы можете показать это с помощью команды pwd.   -  person Steve Samuels    schedule 02.03.2015


Ответы (1)


Как отмечает @Roberto Ferrer, программу трудно читать. (Некоторые из нас пытались улучшить представление, но не с целью исправления ошибок кода.) Действительно, он содержит множество фатальных мелких ошибок, в основном близких к случайности при использовании одинарных кавычек при ссылках на локальные макросы.

 `   ' 

Отсутствуют нужные кавычки; добавлены лишние кавычки, которые в вашем случае были бы фатальными; вы используете неправильные кавычки в некоторых строках. Таким образом, утверждение о том, что программа работает, необоснованно и выглядит абсурдным. В лучшем случае вы представили свою программу очень небрежно и непрофессионально.

Однако есть одно главное недоразумение, которое полностью подрывает цель программы. Временный файл, названный tempfile и каким-то образом созданный в программе, не выживет за пределами end программы. Это точный смысл, в котором файл является временным. Так что бесполезно думать, что использование временных файлов - это способ save файлов для каких-либо последующих целей. Даже если бы это было так, от прямого использования файла не было бы никакой пользы.

Незначительным исключением является то, что иногда в случае сбоя сеанса Stata временные файлы остаются за пределами end программы, но, поскольку это по сути непредсказуемо, это не имеет отношения к вашему проекту.

Еще одна необычная особенность вашей программы - это, в лучшем случае, save текущий набор данных в одном временном файле. В вашем коде нет ничего общего с несколькими файлами.

Желание имитировать то, что делает SAS, не является прозрачной целью для программистов Stata; я предполагаю, что доля программистов Stata, знакомых с SAS, составляет порядка 1%, поэтому вам нужно будет объяснять больше, если вы не стремитесь к аудитории в этот 1%. Чтобы сделать это вопросом любой ценности, вам как минимум нужно будет объяснить, что на самом деле означает одновременная обработка нескольких наборов данных в терминах Stata. Идея Stata заключается в том, что наборы данных, которые вы хотите связать, можно комбинировать с помощью append, merge и других подобных команд, но это совсем не похоже на то, что вы хотите.

Совет избегать tokenize: Я не думаю, что это вообще ясно. Какой совет от кого, а главное почему?

Если вы хотите показать нам работающую программу и попросить совета о том, как ее расширить, это может иметь смысл, но в настоящее время кажется, что ваша идея с самого начала невозможна. Представлять код, усыпанный ошибками, и утверждать, что он работает, очень озадачивает.

person Nick Cox    schedule 27.02.2015