Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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
sas宏中嵌入的proc sql是否可以动态合并到数据集,从而模拟问题青年的住院治疗安置决策?_Sql_Join_Merge_Sas_Switch Statement - Fatal编程技术网

sas宏中嵌入的proc sql是否可以动态合并到数据集,从而模拟问题青年的住院治疗安置决策?

sas宏中嵌入的proc sql是否可以动态合并到数据集,从而模拟问题青年的住院治疗安置决策?,sql,join,merge,sas,switch-statement,Sql,Join,Merge,Sas,Switch Statement,大家下午好,星期五快乐 我正在尝试将青少年安置模拟自动化到住院治疗中,在那里他们成功的可能性最高。成功在进入治疗后3年内被视为“不复发”。已为每个地点生成预测累犯的方程式,并将方程式应用于场景中的每个人(基于风险、年龄等年轻人特征,服务水平)。每个年轻人都预测了每个地点的成功率,这就造成了一个问题:年轻人没有资格使用他们预测成功率的所有治疗设施。事实上,治疗地点具有不同但重叠的资格。 让我们举一个虚构的例子。约翰尼(身份证号5,下图)是一名被控吸毒的15岁男孩。对于位置A,Johnny的“预测成

大家下午好,星期五快乐

我正在尝试将青少年安置模拟自动化到住院治疗中,在那里他们成功的可能性最高。成功在进入治疗后3年内被视为“不复发”。已为每个地点生成预测累犯的方程式,并将方程式应用于场景中的每个人(基于风险、年龄等年轻人特征,服务水平)。每个年轻人都预测了每个地点的成功率,这就造成了一个问题:年轻人没有资格使用他们预测成功率的所有治疗设施。事实上,治疗地点具有不同但重叠的资格。 让我们举一个虚构的例子。约翰尼(身份证号5,下图)是一名被控吸毒的15岁男孩。对于位置A,Johnny的“预测成功率”为91%,位置B为88%,位置C为50%,位置D为75%。如果他在位置A接受治疗,Johnny最有可能成功(即在接受治疗后三年内不复发);不幸的是,地点A只接受17岁或以上的年轻人;因此,约翰尼没有资格在这里接受治疗。或者,对于约翰尼来说,位置B是次佳位置。让我们假设约翰尼符合位置B的条件,但位置B的所有床位都已填满;所以,我们现在必须看位置D,因为它现在是约翰尼的“最佳可用”选项,75%。 到目前为止的得分:我们正在将年轻人与他们符合条件并可能享有最大成功可能性的地点的可用床位进行匹配。不幸的是,每个地点只有一定数量的可用床位,不同地点的可用床位数量也不同。进入治疗机构的资格不同,但有重叠(例如,12-17岁和14-20岁)。 为了模拟基于成功率的安置决策可能是什么样子,我在excel中手动浏览了上面描述的400多名年轻人的场景。我花了大约一个星期的时间。我想使用嵌入SAS宏中的PROC SQL来自动化这些放置场景,最终目标是a)获得引导迭代的能力,以便检查分布中的效果大小,b)节省时间,c)用手做这件事时,沮丧地再次撞击我的头、桌子和墙壁,以防止进一步的脑损伤。作为一名研究人员,我从来没有必要也没有特权在我的典型工作中使用SQL,但我相信这一次已经过去了,我对此感到兴奋!真的我相信它有我正在寻找的能力。不幸的是,它正在把我打得精疲力尽! 到目前为止,我得到的是:我想通过巧妙地使用合并/加入/切换/或类似的方式来创建和自动化布局模拟。 我有两个数据集(表)。第一个数据集包含所有年轻人信息(每个年轻人一行;几个列包含人口统计、位置排名,对应于预测的成功率)。青年数据集中的行顺序(过去/将随机生成(以模拟青年进入系统并随后进入治疗的随机性)。请注意,我将“清理”合并之前的青年数据集,这样排名列单元格将仅为相应青年符合资格的计划填充。这应排除“青年是否符合计划”问题

但是,在场景中,可用性问题仍然有待解决。 第二个数据集包含治疗设施床位,每行对应一个治疗位置中的一张可用床位;两列包含床位号和位置名称。每个床位(行)仅填充一个位置单元格,但位置将填充多个单元格

因此,按降序排列,我希望将每一排青年人的床与代表他们成功的最佳机会的可用床合并,这样就应该进行合并/加入/切换/操作

on youth.Rank1= distinct TF.Location, 
and if youth.Rank1≠ TF.location then 
merge on youth.Rank2= TF.location, 
if youth.Rank2≠ TF.location then merge at 
youth.Rank3 = TF.location, etc.
简单地说:“在rank1上合并,除非rank1位置不再可用,然后在rank2上合并,除非rank2位置不再可用,然后继续合并,等等,直到所有选项都用尽,寄养(即替代服务)是唯一的选项。
我没有成功地使其工作。我甚至没有成功地使union函数工作。到目前为止,我在SQL中所做的唯一成功的事情是创建单个数据集的视图。这非常令人伤心。我一直遵循这一指导,但我被“where”命令挂断了:

proc sql; /Calls the SQL procedure*/;
create table x as /*Tells SAS to create a table called x*/
select /*Specifies the column(s) to be selected*/
from /*Specificies the tables(s) (data sets) to be queried*/
where /*Subjests the data based on a condition*/
group by /*Classifies the data into groups based on the specified 
column(s)*/
order by /*Sorts the resulting rows observations) by the specified 
column(s)*/
; quit; /*Ends the proc sql procedure*/
坦白地说,我被卡住了,我需要一些建议。我的这个新手在他的头上

我感谢任何人可能提供的任何帮助或指导

干杯

p

您所描述的过程(老实说,我跳过了最后一步,所以可能会遗漏一些东西)不适合SQL,因为每一步都可能影响下一步的结果。但是,您希望为大多数孩子获得最佳结果。(我认为很多文本都是为了说服我们,帮助孩子是多么重要).你实际上没有给我们任何我们可以真正用来帮助的东西,因为你没有给出你的数据模型、数据或预期结果的任何细节。真的没有办法回答这个问题。但我不在乎--我将继续提出一些建议,因为这是一个周五,我从来没有做过对st的意识流回答我建议你不要仅仅用sql来制定你的解决方案,而是使用一个更高级别的程序,这是一个如下所述的过程——因为这是我注意到的一个DB问题