loop based on a condition in another column

2 ビュー (過去 30 日間)
Simon Jurgies
Simon Jurgies 2021 年 3 月 18 日
編集済み: Seth Furman 2021 年 3 月 18 日
I'm working with a 694672x4 table containing the PermNo., date, CUSIP and stock price of a multitude of shares. The data is sorted such that the full time series of a stock is listed below the full time series of the following stock and so forth. (Pls see photo below). I am trying to calculate the daily returns of each stock individually, however I struggle with the way the data is structured. As you can see, column 3 contains the CUSIP which is an individual identifier to every stock in the sample. I am now trying to tell MatLab to calculate the daily returns (using (diff(log(X))))for all rows with the same identifier and start from scratch once the identifier changes. Unfortunately, I cannot provide any initial code as I don't know where to start...
Thank you in advance!
  4 件のコメント
Jan
Jan 2021 年 3 月 18 日
func = @(x) diff(log(x))
Walter Roberson
Walter Roberson 2021 年 3 月 18 日
Probably you will need
func = @(x) {diff(log(x))}
That is because you will be processing vectors, and diff() of a vector is a vector (one shorter), but splitapply() requires that you return a scalar.

サインインしてコメントする。

採用された回答

Seth Furman
Seth Furman 2021 年 3 月 18 日
編集済み: Seth Furman 2021 年 3 月 18 日
To add to Walter's answer, you might also consider groupsummary.
>> rng default
>> t = table([1;1;1;2;2;2;2],rand(7,1),'VariableNames',{'Group','Data'})
t =
7×2 table
Group Data
_____ _______
1 0.81472
1 0.90579
1 0.12699
2 0.91338
2 0.63236
2 0.09754
2 0.2785
>> groupsummary(t,'Group',@(x){diff(log(x))})
ans =
2×3 table
Group GroupCount fun1_Data
_____ __________ ____________
1 3 {2×1 double}
2 4 {3×1 double}

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by