Как я могу дать метки для переменных в Stata из макроса

Я хотел бы создать переменные с плагином, который импортирует таблицу базы данных.
Я использую следующий код для этого:

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

Спасибо

2

Решение

Это возможно, но это не легко. По сути, вы создаете файл .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();
1

Другие решения

Вы не можете сделать это из плагина. Вы не можете создавать переменные, метки. и т.д .. из вашей DLL, набор данных должен быть определен до того, как вы вызовете плагин, как вы, вероятно, уже знаете. Вы можете сохранять значения данных обратно в переменные, но при желании нет добавления «столбцов». Вы можете сохранить нужные имена в макросах, но они попадут в ваш файл «.do», чтобы назначить их переменным в Stata, извините.

0

По вопросам рекламы [email protected]