如何从宏为 Stata 中的变量提供标签
How can I give labels to variables in Stata from macro
我想用插件创建变量,导入数据库表。我使用以下代码来执行此操作:
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 标签1
和
标签定义 var1_label 1 "标签1" 2 "标签2" 标签值 var1 var1_label
谢谢
这是可能的,但并不容易。 基本上,在代码中创建一个 .do 文件(下面的 C# 示例),然后执行 .do 文件。 下面是一个运行 .do 文件,然后使用 ODBC 将结果放入 SQL Server 数据库中的示例。 您可以使用统计/传输执行类似的操作,将数据和变量标签加载到数据库中。
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 中,必须在调用插件之前定义数据集,您可能已经知道。您可以将数据值存储回变量中,但如果您愿意,则无需添加"列"。您可以将所需的名称存储在宏中,但抱歉,将它们分配给 Stata 中的变量将落在您的".do"文件上。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 将包含C样式数组的对象初始化为成员变量(C++)
- 为什么我们可以访问交换机其他情况下标签内的变量
- QT - 我可以使用传递到方法中的变量动态指向 GUI 的标签吗?
- 扩展QMessageBox类时,如何访问QMessageBoxPrivate中的标签变量
- 如何找到标签等于字符串变量的树视图节点
- 如何从宏为 Stata 中的变量提供标签