Я хотел бы создать переменные с плагином, который импортирует таблицу базы данных.
Я использую следующий код для этого:
SF_macro_save («_ vars», «var1 var2 …»);
SF_macro_save («_ types», «type1 type2 …»);
SF_macro_save («_ format», «format1 format2 …»);
SF_macro_save («_ obs», «obs1 obs2 …»);
Это хорошо создает переменные, но я не знаю, как присваивать метки переменным или значениям.
Какую функцию C ++ мне нужно использовать для создания меток? Или как я могу вызвать функции Stata из C ++? (Я использую Visual Studio 10, если это имеет значение)
Я хотел бы вызвать эту функцию Stata из плагина:
переменная метки var1 label1
а также
определение метки var1_label 1 «label1» 2 «label2» значения метки var1 var1_label
Спасибо
Это возможно, но это не легко. По сути, вы создаете файл .do в своем коде (пример C # ниже), а затем исполняете файл .do. Вот пример, который запускает файл .do, а затем помещает результаты в базу данных SQL Server с использованием ODBC. Вы можете сделать что-то подобное со Stat / Transfer, чтобы загрузить данные и метки переменных в базу данных.
string m_stcmd_valuelabels = Server.MapPath("~/Data/Cmd/Stata/") + m_filename_noex + "_valuelables.do";
using (StreamWriter m_sw_stcmd_valuelabels = new StreamWriter(m_stcmd_valuelabels, false))
{
m_sw_stcmd_valuelabels.WriteLine("clear");
m_sw_stcmd_valuelabels.WriteLine("set mem 500m");
m_sw_stcmd_valuelabels.WriteLine("set more off");
m_sw_stcmd_valuelabels.WriteLine("use \"" + m_fullpath.Replace(".zip", ".dta") + "\"");
m_sw_stcmd_valuelabels.WriteLine("valtovar _all, dis");
m_sw_stcmd_valuelabels.WriteLine("uselabel");
m_sw_stcmd_valuelabels.WriteLine("ren lname varname");
m_sw_stcmd_valuelabels.WriteLine("drop trunc");
m_sw_stcmd_valuelabels.WriteLine("odbc insert, dsn(\"MyData\") table(\"" + m_filename_noex + "_valuelabels\") create " + m_statadsn_conn);
m_sw_stcmd_valuelabels.WriteLine("exit");
m_sw_stcmd_valuelabels.WriteLine();
}
string str_PathValueLabels = Server.MapPath("~/Data/Stata12/StataMP-64.exe");
ProcessStartInfo processInfoValueLabels = new ProcessStartInfo("\"" + str_PathValueLabels + "\"");
processInfoValueLabels.Arguments = " /e do \"" + m_stcmd_valuelabels + "\"";
processInfoValueLabels.UseShellExecute = false;
processInfoValueLabels.ErrorDialog = false;
Process batchProcessValueLabels = new Process();
batchProcessValueLabels.StartInfo = processInfoValueLabels;
batchProcessValueLabels.Start();
Вы не можете сделать это из плагина. Вы не можете создавать переменные, метки. и т.д .. из вашей DLL, набор данных должен быть определен до того, как вы вызовете плагин, как вы, вероятно, уже знаете. Вы можете сохранять значения данных обратно в переменные, но при желании нет добавления «столбцов». Вы можете сохранить нужные имена в макросах, но они попадут в ваш файл «.do», чтобы назначить их переменным в Stata, извините.