Stata - команда для возврата пути к файлу или расположения do-файла

Я ломаю голову над этим сегодня - можно ли динамически установить рабочий каталог в Stata с помощью команды в do-файле? Например (по крайней мере, на ПК) вы можете установить каталог в командной строке в зависимости от местоположения файла, который вы запускаете, используя:

%cd%

Таким образом, такая команда, как следующая в начале пакетного файла, автоматически установит каталог в место, где сохранен пакетный файл:

cd %cd%

Что очень хорошо работает для пользователей. Есть ли способ сделать то же самое для do-файла (обнаружить/вывести в локальную переменную место, где открытый do-файл сохранен на машине, на которой он запущен)? Идея состоит в том, чтобы получить более плавную версию следующего, которая определяет правильный путь пользователя, когда несколько пользователей синхронизируются с папкой Dropbox, а конкретный путь к файлу не одинаков для разных пользователей:

#delim ; 
if "`c(username)'"=="Steve" { ; cd "C:/Users/Steve/Documents/My Dropbox/ProjectName/" ; }; 
else if "`c(username)'"=="otherperson" {; cd "/Users/otherpersonusingmac/ProjectName/";};
else if "`c(username)'"=="anotherperson" {; cd "/anotherpersonsDropboxfilepath/ProjectName/";};
# delim cr ;

Спасибо!!


person SOConnell    schedule 28.01.2014    source источник
comment
Вам может быть интересна эта тема: stata.com/statalist/archive/ 2013-07/msg00646.html. Может быть, вы могли бы что-то понять с помощью команды shell.   -  person Roberto Ferrer    schedule 29.01.2014


Ответы (2)


Я не думаю, что есть одношаговое решение, но вы можете добавить определения глобальных макросов в файлы profile.do на каждой машине. Например, добавьте следующее в файл profile.do.

global DROPBOX "C:/Users/richa_000/Dropbox"
global SKYDRIVE "C:/Users/richa_000/SkyDrive"

Затем используйте эти макросы cd в своих скриптах.

. cd $DROPBOX
C:\Users\richa_000\Dropbox

. cd $SKYDRIVE
C:\Users\richa_000\SkyDrive

Укажите правильный путь в файле profile.do каждой машины.

person Richard Herron    schedule 29.01.2014

Предположительно, файл do находится в текущем рабочем каталоге. Если это так, вы можете сохранить созданное значение c(pwd) в локальном или глобальном макросе, который затем можно вызвать:

глобальный текущий каталог "c(pwd)'"'

используйте $currentdir/mydata.dta, очистите

person Stan Longhofer    schedule 31.01.2015