Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stata:用字符串值替换数值的有效方法_Stata - Fatal编程技术网

Stata:用字符串值替换数值的有效方法

Stata:用字符串值替换数值的有效方法,stata,Stata,我有这样的代码: replace fname = "JACK" if id==103 replace lname = "MARTIN" if id==103 replace fname = "MICHAEL" if id==104 replace lname = "JOHNSON" if id==104 这样的多个页面会继续使用,用名字和姓氏字符串替换ID名称。我想知道是否有一种更有效的方法来完成这项工作,也许可以使用recode命令?创建一个ID与Fname、Lname的关联数组 103

我有这样的代码:

replace fname = "JACK" if id==103
replace lname = "MARTIN" if id==103

replace fname = "MICHAEL" if id==104
replace lname = "JOHNSON" if id==104

这样的多个页面会继续使用,用名字和姓氏字符串替换ID名称。我想知道是否有一种更有效的方法来完成这项工作,也许可以使用recode命令?

创建一个ID与Fname、Lname的关联数组

103 => JACK,MARTIN
104 => MICHAEL,JOHNSON
...
替换 id=>hash{id}(fname&lname)


执行此操作的效率将由使用的编程语言来考虑

创建ID与Fname、Lname的关联数组

103 => JACK,MARTIN
104 => MICHAEL,JOHNSON
...
替换 id=>hash{id}(fname&lname)


执行此操作的效率将由所使用的编程语言来决定

您不需要解释要添加的字符串来自何处,但通常最好的技术是什么,请参见


您没有解释要添加的字符串来自何处,但通常最好的技术是什么,请参见


我将附和其他答案,这些答案表明
合并是最好的方法

但是,如果您绝对必须按项目对行进行编码(同样是凌乱的),您可以通过使用MS Excel“帮助”您编写代码来生成一长串
replace
命令(“页面”)。以下是Excel工作表的图片,其中有一个示例,显示MS Excel公式:

        columns:
          A         B      C     D
row: 1  last      first    id   code
     2  MARTIN    JACK    103   ="replace fname=^"&B2&"^ if id=="&C2
输入该值,确保在公式计算时它看起来像Stata代码(除了插入符号),然后将D列中的公式复制到列表的末尾。然后将公式生成的D列中的整块Stata代码复制到do文件中,并对所有要替换的“^”进行查找和替换(如果在其他地方使用插入符号进行数学运算,请小心!!),最终生成正确的Stata语法


(这确实是一种蛮力的方式,并且在您的代列表随后发生更改的情况下,这种方式的动态性会降低。所有--对于在这里回答一个提倡使用Excel的问题提前表示歉意:)

我将回应其他答案,这些答案表明合并是最好的方式

但是,如果您必须对行进行逐项编码(同样是凌乱的),您可以使用MS Excel“帮助”您编写代码,从而生成一个包含
replace
命令的长列表(“页面”)。下面是Excel工作表的图片,其中有一个示例,显示了MS Excel公式:

        columns:
          A         B      C     D
row: 1  last      first    id   code
     2  MARTIN    JACK    103   ="replace fname=^"&B2&"^ if id=="&C2
输入该值,确保公式计算时它看起来像Stata代码(除了插入符号),然后将D列中的公式复制到列表的末尾。然后将由公式生成的D列中的整个Stata代码块复制到do文件中,并执行查找和替换(如果您在其他地方使用插入符号用于数学用途,请注意!!)将所有“^”替换为“,这将生成正确的Stata语法


(这确实是一种蛮力的方式,如果您的生成列表随后发生更改,则动态性会降低。所有人——对于在此处回答一个提倡使用Excel的问题提前表示歉意:)

如何在Stata中创建“关联数组”?我从来没有见过这种语法。原理很好。请注意,这不是,也不是任何类型的Stata语法。只有当您有一个向量化的
粘贴
函数来连接而不循环时,该原理才能有效地工作。不记得Stata是否这样做了--它不在
h string\u函数中。当然,所有这些都是为了逃避好的“字典”策略(Nick的答案)。如何在Stata中创建“关联数组”?我从来没有见过这种语法。原理很好。请注意,这不是,也不是任何类型的Stata语法。只有当您有一个向量化的
粘贴
函数来连接而不循环时,该原理才能有效地工作。不记得Stata是否这样做了--它不在
h string\u函数中。当然,所有这些都是为了逃避好的“字典”策略(Nick的答案)。我不习惯将其作为单独的文件——这会增加同事出错的可能性。你知道如何实现Ram的策略吗?合并过程可能是最快的解决方案。您可以随时为同事保存和提供合并的数据文件,从而消除他们重复此操作的需要。我不认为使用单独的文件比直接键入字符串更容易出错。不管怎样,这正是@Ram的策略。我不喜欢把它作为一个单独的文件——这会增加同事出错的可能性。你知道如何实现Ram的策略吗?合并过程可能是最快的解决方案。您可以随时为同事保存和提供合并的数据文件,从而消除他们重复此操作的需要。我不认为使用单独的文件比直接键入字符串更容易出错。无论如何,这正是@Ram的策略。