全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3879 6
2013-12-07

在附上的数据里有三个变量:id, year, beta。我已经对year(升序)和beta(降序)做了排序。我想在每一年的数据里,根据betapercentileid进行频率统计。比如,在1998年,我想在前10%的1998年的beta里统计各个id出现的频率,前20%的1998年的beta里统计各个id出现的频率,前30%……以此类推,一直到在100%的1998年的beta里统计各个id出现的频率,并保存数据。对1999年也是一样的操作。


非常感谢各位的帮忙!

sample.xlsx
大小:(9.92 KB)

 马上下载


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-12-7 07:39:16
我大概觉得是用proc mean,但后面怎么设置条件,我不是很懂。期待答复。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-12-7 10:57:25
太阳能,你那个问题可用excel-vba解决,下面代码仅实现前100%beta里各个id出现的频率,如前30%可修改Rank=100为Rank=30,如此类推。还请牛人修改下面代码,使其自动化。

Sub 查询()
'
' 统计频率 宏
' 在100%的beta里统计各个id出现的频率
'

'注意源数据表名为Sheet1 (2),透视表名要为Sheet3.
   
    Columns("A:A").Select
    Selection.FormatConditions.AddTop10
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1)
        .TopBottom = xlTop10Top
        .Rank = 100 '可修改为你需要前%的数值,100表示前100%
        .Percent = True
    End With
    With Selection.FormatConditions(1).Font
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 10498160
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    ActiveWindow.SmallScroll Down:=-36
    Range("A1:C25").Select
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Sheet1 (2)!R1C1:R25C3", Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:="Sheet3!R3C1", TableName:="数据透视表1", DefaultVersion:= _
        xlPivotTableVersion14
    Sheets("Sheet3").Select
    Cells(3, 1).Select
    ActiveSheet.PivotTables("数据透视表1").AddDataField ActiveSheet.PivotTables("数据透视表1" _
        ).PivotFields("id"), "求和项:id", xlSum
    With ActiveSheet.PivotTables("数据透视表1").PivotFields("id")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("数据透视表1").PivotFields("求和项:id")
        .Caption = "计数项:id"
        .Function = xlCount
    End With
    Range("B7").Select
    With ActiveSheet.PivotTables("数据透视表1").PivotFields("计数项:id")
        .Calculation = xlPercentOfColumn
        .NumberFormat = "0.00%"
    End With
End Sub
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-12-7 11:35:15
derickastro 发表于 2013-12-7 10:57
太阳能,你那个问题可用excel-vba解决,下面代码仅实现前100%beta里各个id出现的频率,如前30%可修改Rank=10 ...
derickastro, 非常感谢!!!我今天从下午一直等到夜里,你可帮了我大忙![handshake]
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-12-7 11:52:59
建立表s1998的sql:
SELECT sample.beta, sample.id, sample.Year
FROM sample
WHERE (((sample.Year)=1998));

查找前100%的beta的sql:
命名为top表:
SELECT TOP 100 PERCENT s1998.beta, s1998.id, s1998.Year
FROM s1998;

计算id的频数:
命名为fid表:
SELECT top.id, Count(*) AS 频数
FROM [top]
GROUP BY top.id;




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-12-7 11:59:33
derickastro 发表于 2013-12-7 11:52
建立表s1998的sql:
SELECT sample.beta, sample.id, sample.Year
FROM sample
我好好学习一下。再次感谢你花时间帮忙
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群