求助,stata中定义标量return scalar stata的意义是什

查看: 488|回复: 10
wald检验可以做的,建议你用stata,更方便 我经常帮别人做这类的数据分析的
1.估计方法采用的是最小二乘的方法 2。robust选项表明标准误经过怀特异方差修正,从而使结果更稳剑 3。F 值越大,p值越低,也就是说所有系数的联合显著性越高,换句话说就是所有变量的系数都为零的可能性越低。
地下黑名单
1或0.2,选择统计量显著且最大的变量进入模型;b剔除变量的选择用Z统计量(Wald能够进行logistic回归分析的软件非常多,常用的有SPSS、SAS、Stata、EGRET (
很简单,用EVIEWS先对回归方程做混合模型求解,在结果中有一项Sum squared resid( stata12面板数据怎么判断选择变截距模型还是变系数模型 1 2008-06
STATA 的功能列表 数据管理 (Data management) 资料转换、分组处理、附加档案、 ODBC 、行 - 列转换、数据标记、字符串函数…等 基本统计 (Basic statistics) 直交表、相关性、 t- 检定、变异数相等性检定、比例检定、信赖区间…等 线性模式 (Line
yunyun2619
建议你去百度或GOOGLE搜索一下,看看有没有相关信息或资料可以帮你。
逻辑上讲,这是调取回归的拟合优度值 这一命令是回归后输入的 e(r2)是stata在回归后存储的拟合优度值 这个命令意思是 :让r2(可以理解为R的平方)=回归的拟合优度系数 你再输入 scalar list 就可以看到 r2的取值了
结果的前两行表示模型的类别,LZ采用的为randomeffect随机模型,截面变量:province,样本数目310.群组数目31,也就是每组10个观测值。 3-5行表示模型的拟合优度,分别为within,between,overall,组内,组间,总体三个层次。 6-7行表示针对参
通州新金路惠耳
一、极大似然估计的原理 极大似然的估计原理可以由下面的程序得到说明。我们首先生成 10 个服从 正态分布的总体,每个总体的均值都不同,依次为 0,1,2,3,4,5,6,7,8, 9。方差相同,均为 1。然后我们随机地取出一个总体,从中抽出 10 个Posts - 789,
Articles - 0,
Comments - 1506
17:41 by 潇湘隐者, ... 阅读,
用户定义函数(UDF)分类&
&&&& SQL SERVER中的用户定义函数(User Defined Functions 简称UDF)分为标量函数(Scalar-Valued Function)和表值函数(Table-Valued Function)。其中表值函数又分为Inline table-valued functions和Multistatement table-valued functions。
&&& 用户定义函数(UDF)在 SQL Server 中发挥重要的作用。用户定义函数可以用于执行复杂的逻辑,可以接受参数并返回数据。很多时候我们需要写复杂的逻辑,不能使用单个查询编写。在这种情况下,用户定义函数(UDF)发挥了重要的作用。关于用户定义函数的优点,可以参考官方文档“”。如下所示:
在 SQL Server 中使用用户定义函数有以下优点:
允许模块化程序设计。
只需创建一次函数并将其存储在数据库中,以后便可以在程序中调用任意次。用户定义函数可以独立于程序源代码进行修改。
执行速度更快。
与存储过程相似,Transact-SQL 用户定义函数通过缓存计划并在重复执行时重用它来降低 Transact-SQL 代码的编译开销。这意味着每次使用用户定义函数时均无需重新解析和重新优化,从而缩短了执行时间。
和用于计算任务、字符串操作和业务逻辑的 Transact-SQL 函数相比,CLR 函数具有显著的性能优势。Transact-SQL 函数更适用于数据访问密集型逻辑。
减少网络流量。
基于某种无法用单一标量的表达式表示的复杂约束来过滤数据的操作,可以表示为函数。然后,此函数便可以在 WHERE 子句中调用,以减少发送至客户端的数字或行数。 & &
UDF标量函数(Scalar-Valued Function)影响性能案例 && 官方文档说用户定义函数(UDF)的执行速度更快,意思是性能非常好,如果你对此深信不疑的话,那么我只能呵呵了,其实关于用户定义函数,尤其是标量函数,需要合理使用。有些场景使用不当,则有可能造成性能问题。关于UDF的标量函数会引起性能的问题,下面我们先看一个我构造的例子吧(AdventureWorks2014),我们需要查询某个产品有多少订单(其实也是优化过程中遇到,然后我在此处构造类似这样的一个案例)
USE AdventureWorks2014;GOCREATE&FUNCTION Sales.FetchProductOrderNum(&&& @ProuctID& INT) RETURNS&INTBEGIN&&& DECLARE @SaleOrderNum INT;&&& SELECT @SaleOrderNum=COUNT(SalesOrderID)& FROM Sales.SalesOrderDetail &&& WHERE ProductID=@ProuctID&&& GROUP&BY ProductID;&&&& RETURN @SaleOrderNENDGO
我们知道Sales.SalesOrderDetail表里面ProductID=870的订单数量有4688,而ProductID=897的订单数量只有2条记录。那么执行下面语句时,性能会有什么差异呢?
SET&STATISTICS&TIME&ON;&SELECT&DISTINCT ProductID, Sales.FetchProductOrderNum(ProductID) FROM Sales.SalesOrderDetailWHERE ProductID=870&SELECT&DISTINCT ProductID, Sales.FetchProductOrderNum(ProductID) FROM Sales.SalesOrderDetailWHERE ProductID=897&&SET&STATISTICS&TIME&OFF;
为什么会有这种情况,这是因为SQL语句里面调用用户定义标量函数(UDF Scalar Function),都是逐行调用用户定义函数,这样需要为每行去提取用户定义函数的定义,然后去执行这些定义,从而导致了性能问题;更深层次的原因是因为函数采用了过程式的处理方法,而SQL Server查询数据则是基于数据集合的,这样在采用过程式的逐行处理时,SQL Server性能就会显著降低。
那么我来分析看看这两个SQL的实际执行计划:从下面实际执行计划,我们可以看到第一个SQL语句执行计划从Index Seek 到Compute Scalar的数据流变粗了。这个表示第一个SQL语句的Index Seek返回的数据要多。
接下来,我们从Compute Scalar(进行一个标量计算并返回计算值)里面可以看到Actual Number of Rows 的值为4688 和2 。
而Compute Scalar在此处就是调用标量函数,而标量函数调用总是需要资源开销和时间的,当调用次数从2次变为4688次时,elapsed time 和CPU time当然会翻了好多倍。实际环境中,用户定义标量函数的逻辑比上面简单的案例更复杂,资源开销更大,所以有时候你会看到性能差距非常悬殊的SQL案例,在工作中我就发现过这样的情况,有些开发人员对自定义标量函数使用不当影响性能不甚了解。甚至是完全不知情。他们对此振振有词:你看我SQL语句是一样的,只是参数不同,效率差别这么大。肯定是数据库出现了阻塞或性能问题。要么是服务器的性能问题,反正我SQL是没有问题的,你看这一条语句执行才一秒,换个参数就要一分多钟,这不是你数据库性能问题,那是什么? 这样的一个伪逻辑让我很无语。(习惯性就让我和数据库、服务器背了一个大黑锅)。
&& 回到正题,上面两个SQL语句的实际执行计划的Cost比值为81%:19%;Compute Scalar(进行一个标量计算并返回计算值)的Number of Executions都是1次。但是实际的CPU time &elapsed time的比值比这个大了好多。另外第一个SQL的Compute Scalar的代价比值居然只有1%。为什么会这样呢?我们是不是很迷惑?
关于这个大家疑惑的地方,里面给了我们一个阐述,截取文章中两段在此(翻译如有不当,请参考原文):
&&&&& However, you may not be aware that the “Actual Execution Plan” is a dirty rotten liar. Or maybe I should say that the terms “Actual Execution Plan” and “Estimated Execution Plan” are misleading. There is only one execution plan, it gets created when the queries are compiled, and then the queries are executed. The only difference between the “Actual” and the “Estimated” execution plan is that the estimated plan only tells you the estimates for how many rows flow between iterators and how often iterators are executed, and the actual plan adds the actual data for that. But no “actual operator cost” or “actual subtree cost” is added to the corresponding estimated values – and since those costs are the values that the percentages are based on, the percentages displayed in an actual execution plan are still based only on the estimates.
&&& 然而,你可能不知道“实际执行计划”其实是一个肮脏的烂骗子,或者我应该说“实际执行计划”和“估计执行计划”误导你了。当查询语句编译后,只有一个实际的执行计划。“实际执行计划”与“估计执行计划”的区别就在于“估计执行计划”只告诉你估计了有多少行流向迭代和迭代器执行频率,而实际执行计划将实际数据应用进来。但是“实际操作成本”或“实际子树成本”并没有添加到“实际执行计划”的估计值里面, 因为这些代价都是基于百分比的值,在实际执行计划中显示的百分比仍然基于只估计数。
&&& But note that, again, the execution plan is lying. First, it implies that the UDF is invoked only once, which is not the case. Second, look at the cost. You may think that the 0% is the effect of rounding down, since a single execution of the function costs so little in relation to the cost of accessing and aggregating 100,000 rows. But if you check the properties of the iterators of the plan for the function, you’ll see that all operator and subtree costs are actually estimated to be exactly 0. This lie is maybe the worst of all – because it’s not just the plan lying to us, it is SQL Server lying to itself. This cost estimate of 0 is actually used by the query optimizer, so all plans it produces are based on the assumption that executing the function is free. As a result, the optimizer will not even consider optimizations it might use if it knew how costly calling a scalar UDF actually is.
但是需要再次注意,执行计划在欺骗你,首先,它意味着只调用了UDF一次,其实不是这样。其次,从成本(Cost)来看,你可能会认为0%是向下舍入影响,因为单次执行函数的开销如此之小,以至于执行100,000次的成本也很小。但如果你检查执行计划的功能迭代器的属性,你会发现所有的操作代价和子树代价实际的估计为0,这是一个最糟糕的谎言。 因为它可能不只是为了欺骗我们,而是SQL SERVER为了欺骗它自己。实际上是查询优化器认为调用函数的成本为0,因此它生成的所有执行计划都是基于调用UDF是免费的。其结果是即使调用标量UDF的代价非常昂贵,查询优化器也不会考虑优化它。
& 如何优化UDF标量函数(Scalar-Valued Function)
如何优化上面SQL语句呢?从原理上来讲就是不用用户定义函数或减少调用次数。 其实我在实际应用中,减少调用次数一般通过下面方法优化:
1:减少用户定义标量函数调用次数(子查询)
SET&STATISTICS&TIME&ON;&SELECT ProductID, Sales.FetchProductOrderNum(ProductID)FROM(&&& SELECT&DISTINCT ProductID FROM Sales.SalesOrderDetailWHERE ProductID=870) T&SET&STATISTICS&TIME&OFF;
& 2:减少用户定义标量函数调用次数(临时表)
SET&STATISTICS&TIME&ON;&&SELECT&DISTINCT ProductID INTO #SalesOrderDetail FROM Sales.SalesOrderDetailWHERE ProductID=870;&SELECT ProductID, Sales.FetchProductOrderNum(ProductID)FROM #SalesOrderDetail&SET&STATISTICS&TIME&OFF;
& 为什么要用临时表呢?不是子查询就可以解决问题吗?问题是实际应用当中,有些逻辑复杂的地方需要借助临时表解决,有时候子查询反而不是一个好的解决方法。
另外,我们来看看这篇文章中,测试UDF的性能案例,本想单独翻译这篇文章,不过结合这篇文章,在此实验验证也是个不错的选择。下面案例全部来自这篇博客。我们先准备测试环境:
CREATE&FUNCTION dbo.Triple(@Input&INT) &&&&&& RETURNS&INT&AS&BEGIN; & DECLARE @Result∫ & SET @Result = @Input * 3; & RETURN @Result; END; GO&&CREATE&TABLE dbo.LargeTable & (KeyVal INT&NOT&NULL&PRIMARY&KEY, && DataVal INT&NOT&NULL&CHECK (DataVal BETWEEN 1 AND 10) & );&WITH Digits AS (SELECT d FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) AS d(d)) INSERT INTO dbo.LargeTable (KeyVal, DataVal) SELECT 1000000 * sm.d &&&& + 100000 * ht.d + 10000 * tt.d + 1000 * st.d &&&& + 100 * h.d + 10 * t.d + s.d + 1, &&&&&& 10 * RAND(CHECKSUM(NEWID())) + 1 FROM&& Digits AS s,& Digits AS t,& Digits AS h, &&&&&& Digits AS st, Digits AS tt, Digits AS ht, &&&&&& Digits ASGO&CREATE&INDEX NCL_LargeTable_DataVal ON dbo.LargeTable (DataVal);GO&SET&STATISTICS&TIME&ON; &SELECT&MAX(dbo.Triple(DataVal)) AS MaxTriple FROM dbo.LargeTable AS &SELECT&MAX(3 * DataVal) AS MaxTriple FROM dbo.LargeTable AS &SET&STATISTICS&TIME&OFF;
& 如上所示,用户定义的标量函数dbo.Triple,测试用的的一个表dbo.LargeTable ,以及构造了1000000行数据。从下面我们可以看到用户定义标量函数性能确实很糟糕。
下面测试4中写法的性能。相信这个简单的脚本,大家都能看懂,在此不做过多描述、说明:
DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS;SET NOCOUNT ON;SET&STATISTICS&TIME&ON; SELECT&MAX(dbo.Triple(DataVal)) AS MaxTriple FROM dbo.LargeTable AS &SET&STATISTICS&TIME&OFF;
DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS;SET&STATISTICS&TIME&ON; SELECT&MAX(dbo.Triple(DataVal)) AS MaxTriple FROM (SELECT&DISTINCT DataVal FROM dbo.LargeTable) AS SET&STATISTICS&TIME&OFF;
DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS;&SET&STATISTICS&TIME&ON; &SELECT&MAX(3 * DataVal) AS MaxTriple &FROM (SELECT&DISTINCT DataVal FROM dbo.LargeTable) AS &SET&STATISTICS&TIME&OFF;
DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS;&SET&STATISTICS&TIME&ON; &SELECT&MAX(3 * DataVal) AS MaxTriple &FROM dbo.LargeTable AS &SET&STATISTICS&TIME&OFF;
博客里面统计的数据如下所示
T-SQL Syntax
Avg CPU Time in ms
Avg Elapsed Time in ms
Function, no distinct subquery
<font style="font-size: 10.5pt" color="#925.0
<font style="font-size: 10.5pt" color="#247.8
Function, subquery
<font style="font-size: 10.5pt" color="#3.0
<font style="font-size: 10.5pt" color="#3.8
Inline calculation, subquery
<font style="font-size: 10.5pt" color="#3.2
<font style="font-size: 10.5pt" color="#0.4
Inline calculation, no distinct subquery
<font style="font-size: 10.5pt" color="#.0
<font style="font-size: 10.5pt" color="#.0
这个跟我测试的数据有所出入(可能跟数据库版本、机器配置有一点关系)。但是大体方向是一致的。Avg CPU Time和Avg Elapsed Time 执行时间依然Function, no distinct subquery& & Function, subquery = Inline calculation, subquery & Inline calculation, no distinct subquery
那么接下来,我们先进一个表值函数Triple_tbl,对比表值函数和标量函数的性能。如下所示
CREATE&FUNCTION dbo.Triple_tbl (@DataVal INT)RETURNS&TABLE&ASRETURNSELECT @DataVal * 3 TripleGO&&DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS;SET&STATISTICS&TIME&ON; &SELECT&MAX(dbo.Triple(DataVal)) AS MaxTriple FROM (SELECT&DISTINCT DataVal FROM dbo.LargeTable) AS &SELECT&MAX(3 * DataVal) AS MaxTriple FROM dbo.LargeTable AS &SELECT&MAX(t.Triple) AS MaxTripleFROM dbo.LargeTable lCROSS APPLY dbo.Triple_tbl(l.DataVal) t&SET&STATISTICS&TIME&OFF;GO
从下可以看出,表值函数比标量函数性能要好很多,所以用表值函数替换标量函数也是一个可以考虑的优化方案。
& 参考资料:stata中str,python中str,vb中str,vfp中str,java中的str,matlab中str,stata中reshape,stata中egen,stata中merge,stata中日期,stata中uniform,stata中的log,stata中fgls_爱问通
scalar a=”我爱” +“stata” 一些运算函数: comb(n,k) 从 n 中取 k ...若不相等为 1 分离变量值 clear input str15 x 10*123 543*21 ........
stata基础命令_计算机软件及应用_it计算机_专业资料...变量中提取的年月 设置tdate为整数型变量 提取t...(yearnum) br yearstr yearnum 压缩数据空间 .........
str80 80 80 bytes 1 2 max length (characters) 1 2 bytes 1 2 4 4 ...3、 回归方法:stata 将中位数回归看作是 quantile regressions 的一个特例。 .........
(dataset) 1、用键盘建立小型数据集 ① input 命令 input str2 sex end ② ...[, options] 一、建立 stata 数据集(dataset) 2、读 * 文件中的数据.........
str#, as many as #characters (clean excel data following stata data format) (save excel as .csv file ) insheet using “c:datatest.csv” infix .........
在线互动式文档分享平台,在这里,您可以和千万网友分享自己手中的文档,全文阅读其他......
只要数据有读进 stata 中,变量名称就会出现。它的优点是 (1)确认数据输入无误...cd e:sample input id female race ses str3 schtype prog read write .........
请问如果 58 代表的是以毫秒为单位的时间,那么在 stata 中其对应的是哪一秒?...运行如程序: set obs 2; gen str24 x=”25”.请使用两种方法将变量.........
变量的取值类型: (1)字符型:字符变量存储格式是 str?,str 表示格式?表示该...(p<05) , 即认为数据确实有内生性问题 stata 中是用 ivreg 命令实现工具.........
字符型变量的储存格式为str#,#表示字符的最大长度,而不是实 际长度。在stata的se版本中,字符型的最长长度为244个,字符型变量在数据编 辑器中显示为红色字体。.........
detail *-1 定义变量的显示格式 * str18 文字型变量,每个观察值占据 18 ...经济分析中的stata操作 ... 70页 免费 聚类分析stata操作讲义 16页 免费 eviews.........
length of 3 bytes: 3 bytes: name = gen str3 name = bob replace var1 = 123456 stata automatically increases the storage type if necessary.........
str30 v1 int v2 int v3 int v4 str10 v5 using d2, clear *...stata9adopersonalnet_coursea2_data_manage * 类别变量中样本的重复非常.........
公司(statacorp)开发研制出来的,在全球范围内被广泛应用于企业和学术机 构中。...其中,str 即 string(字符串)的缩写,数字 8 代表最长的字符长度。 第四栏 .........
str18 文字型变量,每个观察值占据18个空格 * %-18s 靠左列印于屏幕上;若%...stata10adopersonalcoursea2_data_manage * 类别变量中样本的重复非常普遍.........
str18 文字型变量,每个观察值占据18个空格 * %-18s 靠左列印于屏幕上;若%...stata10adopersonalcoursea2_data_manage * 类别变量中样本的重复非常普遍.........
str20 country year lgaspcar lincomep lrpmg lcarpcap
using gasoline....[_cons] 注意 stata 中 fe 包含常数项,因此固定效应是常数项+ui preserve.........
stata命令1_计算机软件及应用_it计算机_专业资料。stata 命令用途
清空 stata...gen str a=b replace a=”none” if b= =”” gen byte a=b replace .........
stata在统计与计量分析中的应用ch1-5程序_金融投资_经管营销_专业资料。stata...(sexstr) * example 2 use destring1, clear destring, generate(id2 num.........
学习stata的一些课堂笔记 .sysuse auto,clear 从内存中调一笔数据 .help sysuse...字符→str14 %-14s state2 str2 %-2s abbreviation region int %-0g .........
■ 网友在搜扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
stata 中 scalar r2=e(r2)是什么意思如题
风飘飘wb28
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
逻辑上讲,这是调取回归的拟合优度值这一命令是回归后输入的e(r2)是stata在回归后存储的拟合优度值这个命令意思是 :让r2(可以理解为R的平方)=回归的拟合优度系数你再输入 scalar list 就可以看到 r2的取值了
为您推荐:
其他类似问题
扫描下载二维码(window.slotbydup=window.slotbydup || []).push({
id: '2014386',
container: s,
size: '234,60',
display: 'inlay-fix'
&&|&&0次下载&&|&&总24页&&|
您的计算机尚未安装Flash,点击安装&
阅读已结束,如需下载到电脑,请使用积分()
下载:10积分
0人评价31页
0人评价16页
0人评价20页
0人评价26页
0人评价18页
所需积分:(友情提示:大部分文档均可免费预览!下载之前请务必先预览阅读,以免误下载造成积分浪费!)
(多个标签用逗号分隔)
文不对题,内容与标题介绍不符
广告内容或内容过于简单
文档乱码或无法正常显示
文档内容侵权
已存在相同文档
不属于经济管理类文档
源文档损坏或加密
若此文档涉嫌侵害了您的权利,请参照说明。
我要评价:
下载:10积分

我要回帖

更多关于 stata scalar命令 的文章

 

随机推荐