楼主: hlfjacky
3948 6

[实际应用] 请教:如何根据percentile计算频率 [推广有奖]

  • 2关注
  • 0粉丝

已卖:4份资源

大专生

83%

还不是VIP/贵宾

-

威望
0
论坛币
861 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
660 点
帖子
80
精华
0
在线时间
25 小时
注册时间
2013-1-13
最后登录
2020-4-21

楼主
hlfjacky 发表于 2013-12-7 07:17:39 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

在附上的数据里有三个变量: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)


二维码

扫码加我 拉你入群

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

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

关键词:percentile percent cent Tile CEN 如何

沙发
hlfjacky 发表于 2013-12-7 07:39:16
我大概觉得是用proc mean,但后面怎么设置条件,我不是很懂。期待答复。。。

藤椅
derickastro 发表于 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

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

报纸
derickastro 发表于 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;




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

7
hihixl 发表于 2013-12-7 12:40:37
同样也学习了~

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 22:18