Насколько мне известно, нет встроенного или автоматизированный способ отслеживания и управления установленных пакетов за пределами того, что доступно через ado
или net
.
Я бы тоже согласился с @Nick Cox, что эта задача кажется странной, и я не могу себе представить, как новая установка или переустановка Stata могла бы знать, что было установлено ранее, но я нахожу этот вопрос интересным по другим причинам.
Основная причина, по которой пользователи, имеющие Stata, установлены на нескольких машинах, которым нужны те же пакеты на обеих машинах. Я столкнулся с аналогичной проблемой, когда приобрел новый компьютер и установил Stata, но хотел, чтобы все пакеты, которые я использую, были доступны. Вне перемещения каталога ado или выбранного содержимого я не знаю о каком-либо быстром решении.
Здесь можно будет использовать вывод ado dir
на одной машине, чтобы определить, что вам нужно установить на второй машине с новой установкой Stata.
Метод, который вы предлагаете с помощью цикла foreach
, может сэкономить ваше время, если вам придется вводить или копировать/вставлять множество пакетов и URL-адресов. В то же время это полезно только в том случае, если у вас есть много пакетов из нескольких репозиториев, потому что вам нужно будет указывать net cd
на URL-адрес каждый раз, как вы показываете в своем примере.
Альтернативное решение - это программное решение. Как вы знаете, ado dir
перечисляет каждый установленный пакет, URL-адрес и краткое описание пакета. Используя это, файл журнала и встроенные функции ввода-вывода, можно записать короткую программу для автоматизации процесса и динамической сборки файла do, который содержит команды для установки уже установленных пакетов.
В приведенном ниже коде создается файл do, содержащий команды (в данном случае net describe package, from(url)
) для каждого пакета, который я установил на свой компьютер.
clear *
tempfile log1
log using "`log1'", text name(mylog)
ado dir
log close mylog
tempname logfile
file open `logfile' using "`log1'", read
file read `logfile' line
file open dfh using "path/to/your/dofile.do", write replace
local pckage "package"
while r(eof) == 0 {
if `: list pckage in line' {
local packageName : word 3 of `line'
local dirName : word 5 of `line'
di "`packageName' `dirName'"
file write dfh "net describe `packageName', from(`dirName')"
file write dfh _newline
}
file read `logfile' line
}
file close `logfile'
file close dfh
В приведенном выше коде, я создаю временный файл для записи в лог-файл .txt в и хранить содержимое ado dir
в этом файле.
Затем я открываю файл журнала с помощью file open
и читаю его по строкам в цикле while
.
Выше цикла, я создаю файл do на /path/to/your/dofile.do
, чтобы удерживать вывод цикла - динамически созданные команды, относящиеся к установленным пакетам на моей машине.
Петля будет проходить до тех пор, пока r(eof)
= 0, где r(eof)
- это маркер файла. Я использую оператор if
для сортировки строк файла журнала, содержащих пакет слов, поскольку меня интересуют только те строки с именем пакета и URL-адресом в них.
Внутри блока if
я разбираю локальный макрос line
, чтобы вытащить имя пакета и имя URL/каталога.
это важно: этот раздел кода предполагает, что 3 и 5 слов в макросе всегда будет имя пакета и URL соответственно - Подтвердите с выходаado dir
перед выполнением.
Вам также потребуется изменить команду, которая записывается в дескриптор файла dfh внутри цикла, на то, что вы хотите (net install
и т. Д.), Когда вы готовы выполнить.
Для получения дополнительной помощи по использованию file
, local
с, и tempfile
s выполнить одно из следующих действий в Stata:
help file
help extended_fcn
help macrolists
Там может быть приятнее способа разобрать содержимое ado dir
, но это работает для меня. И, конечно же, я всегда советовал, чтобы вы нашли время, чтобы понять, что делает код, чтобы вы могли делать любые необходимые настройки в соответствии с вашей конкретной ситуацией.
Я не вижу причин, по которым переустановленная Stata должна в любом случае знать, какие пользовательские пакеты, которые вы установили ранее, не больше, чем Stata на одной машине, знали бы, что установлено на другом. Что более важно, почему обновление Windows повлияет на вашу установку Stata? –
Моя машина была повторно обработана после заражения вирусом корневого каталога. Проницательный член нашей ИТ-команды получил результат «ado dir» до вытирания машины и обновления до Windows 10. STATA была переустановлена с диска. Я не предполагаю, что STATA должен иметь память пакетов, но хотел бы понять, есть ли способ переустановки с учетом списка, предоставленного «ado dir». – Todd
Итак, машина была вытерта. Я согласен с ответом @ ander2ed. Обратите внимание, что орфография - это Stata, а не STATA. –