我想用插件创建变量,导入数据库表。 我使用以下代码执行此操作:
SF_macro_save(“_ vars”,“var1 var2 ...”);
SF_macro_save(“_ types”,“type1 type2 ...”);
SF_macro_save(“_ formats”,“format1 format2 ...”);
SF_macro_save(“_ obs”,“obs1 obs2 ......”);
这样可以很好地创建变量,但我不知道如何为变量或值赋予标签。
我需要使用哪种C ++函数来创建标签?或者我如何从C ++调用Stata函数? (如果重要的话,我使用的是Visual Studio 10)
我想从插件中调用这个Stata函数:
标签变量var1 label1
和
标签定义var1_label 1“label1”2“label2” 标签值var1 var1_label
由于
答案 0 :(得分:1)
这是可能的,但这并不容易。基本上,您在代码中创建.do文件(下面的C#示例)然后执行.do文件。下面是一个运行.do文件然后使用ODBC将结果放入SQL Server数据库的示例。您可以使用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 :(得分:0)
你不能从插件中做到这一点。您无法创建变量,标签。从您的dll开始,必须在调用插件之前定义数据集,您可能已经知道了。您可以将数据值存储回变量中,但如果愿意,则不会添加“列”。您可以在宏中存储所需的名称,但它会落在您的“.do”文件中,以便将它们分配给Stata中的变量,抱歉。