alle möglichen Datensätze automatisch erzeugen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: alle möglichen Datensätze automatisch erzeugen

von Karolus » Di, 05.06.2007 09:55

Hallo,


liste am besten noch mal in einer seperaten Tabelle, alle Marken, Farben und Leistungen untereinander und die jeweiligen Teilnutzungwerte in der Spalte rechts daneben. Diese Tabelle markierst du, und gibst über -->Einfügen-->Namen-->Festlegen einen Namen,zb. 'Grunddaten' Schaltfläche : 'Hinzufügen' nicht vergessen.

In der Tabelle 2 holst du die Summe der Teilnutzungswerte mit:
(Formel in D1:)
=SVERWEIS(A1;Grunddaten;2;0)+SVERWEIS(B1;Grunddaten;2;0)+SVERWEIS(C1;Grunddaten;2;0)
Mit einem Doppelklick auf die rechte, untere Marke in der Umrandung der Zelle füllt OOo die Formel für alle anderen Kombinationen auf.

Gruß Karo

von Ontario » Mo, 04.06.2007 23:34

Um meine Conjoint-Analyse zum Laufen zu bringen, würde ich gern noch eine Anschlussfrage stellen.

Mit Hilfe statistischer Verfahren habe ich die Teilnutzen für jede Marke (Audi,BMW,Opel), jede Farbe (rot,blau) und jede Leistung (100,150,200) ermittelt. Diese stehen in Tabelle1:

Code: Alles auswählen

	Marke  Audi	BMW	Opel
	      0,52	0,73	0,37

	Farbe   Rot	Blau	
	        0,3	 0,18	

	Leistung 100	150	200
           0,1	0,2	0,3

Wie kann ich diese auslesen und dann in Tabelle2 weiterverarbeiten?

Nämlich so:
Für den ersten Datensatz "Audi - Rot - 100" (Tabelle2) würde sich der Gesamtnutzen aus "0,52+0,3+0,1" ergeben, also 0,92 betragen.
Für den zweiten Datensatz "Audi - Rot - 150" (Tabelle2) würde sich der Gesamtnutzen aus "0,52+0,3+0,2" ergeben, also 1,02 betragen.
usw.

Tabelle2

Code: Alles auswählen

Audi	Rot	100   
Audi	Rot	150
Audi	Rot	200
Audi	Blau	100
Audi	Blau	150
Audi	Blau	200
BMW	Rot	100
BMW	Rot	150
BMW	Rot	200
BMW	Blau	100
BMW	Blau	150
BMW	Blau	200
Opel	Rot	100
Opel	Rot	150
Opel	Rot	200
Opel	Blau	100
Opel	Blau	150
Opel	Blau	200
Danke für die Hilfe

Viele Grüße

P.S.: Es wäre nicht schlecht, wenn die Anzahl der möglichen Merkmale und die Merkmalsausprägungen variabel wären.

von Karolus » Mo, 04.06.2007 10:12

Hallo Wolfgang
ich müsste ja eigentlich erst Karolus fragen ob ich sein Makro verändern und veröffentlichen darf
Natürlich darfst du das, was meinst du wie ich ans Know How gekommen bin.

Ich halte nur den Titel deines Makros für irreführend, es liest zwar genau 6 Spalten aus, aber die Anzahl der Einträge in den einzelnen Spalten ist variabel.

Zu deiner Anschlussfrage : (Kombinationen innerhalb eines Arrays ohne Wiederholung) muss ich leider passen, es scheint keinen einfachen Algoritmus zum Vertauschen der "Buchstaben" zu geben.

Gruß Karo

Hallo Karo, wie kann man das jetzt Filtern???

von Gert Seler » Mo, 04.06.2007 09:23

das wird die nächste Frage sein, nachdem die Tabelle mit über 46Tausend
Zeilen inklusive Werte gefüllt ist.
Hallo matlat & ontario
jetzt strengt Eueren Grips mal selber an und sucht bei "Wiki"
nach einem Lösungsweg.
Es ist sogar möglich, Literatur über "Star-Basic" käuflich zu erwerben,
wo doch das Programm "OOo" für "Null" EURO erworben werden kann.

Der Ansatz von Karo bietet ja jede Menge Möglichkeiten für
"learning by doing" .

Ich bleibe dabei, falls Ihr jemals solch eine Lösung dringend benötigt,
werdet Ihr nicht darum herumkommen ein "DB-Programm" zu kaufen
oder zu lernen, wie eine gewünschte Datenbank erstellt wird.

mfg
Gert

von matlat » Mo, 04.06.2007 00:35

Hallo,
ich müsste ja eigentlich erst Karolus fragen ob ich sein Makro verändern und veröffentlichen darf, er dürfte aber nichts dagegen haben.
Ich habe es auf 6*6 gebracht, damit es auf ein Tabellenblatt passt, sind 46656 Zeilen.
Karolus' Tipp, alles auf mehrere Tabellenblätter zu verteilen, habe ich noch nicht ausprobiert und umgesetzt.

Code: Alles auswählen

Sub kombinationen2_6x6
Do 
   quellea = thisComponent.sheets(0).getcellbyposition(0,a).string 
   quelleb = thisComponent.sheets(0).getcellbyposition(1,b).string 
   quellec = thisComponent.sheets(0).getcellbyposition(2,c).string 
   quelled = thisComponent.sheets(0).getcellbyposition(3,d).string 
   quellee = thisComponent.sheets(0).getcellbyposition(4,e).string 
   quellef = thisComponent.sheets(0).getcellbyposition(5,f).string 

   thisComponent.sheets(1).getcellbyposition(0,n).string = quellea 
   thisComponent.sheets(1).getcellbyposition(1,n).string = quelleb 
   thisComponent.sheets(1).getcellbyposition(2,n).string = quellec 
   thisComponent.sheets(1).getcellbyposition(3,n).string = quelled 
   thisComponent.sheets(1).getcellbyposition(4,n).string = quellee 
   thisComponent.sheets(1).getcellbyposition(5,n).string = quellef 
   n = n + 1 
   f = f + 1 
   if thisComponent.sheets(0).getcellbyposition(5,f).string  = "" then 
   e = e + 1 : f = 0 : end if
   if thisComponent.sheets(0).getcellbyposition(4,e).string  = "" then 
   d = d + 1 : e = 0 : end if
   if thisComponent.sheets(0).getcellbyposition(3,d).string  = "" then 
   c = c + 1 : d = 0 : end if 
   if thisComponent.sheets(0).getcellbyposition(2,c).string  = "" then 
   b = b + 1 : c = 0 : end if 
   if thisComponent.sheets(0).getcellbyposition(1,b).string = "" then 
   a = a + 1 : b = 0 : end if 
loop until thisComponent.sheets(0).getcellbyposition(0,a).string  = "" 
End Sub
Viel Erfolg damit
Wolfgang

von Ontario » So, 03.06.2007 23:51

ich möcht mich mal an dieses Makro dranhängen und habe es aufgemotzt, so dass ich sogar die Komabinationen von 8 Merkmalen erzeugen könnte
Kanst du gern mal posten. :)

Viele Grüße

von matlat » Sa, 02.06.2007 23:39

Hallo Karolus
der erste Teil meiner Frage mit den 17 Mio war auch nur Gedankenspiel, aber Danke für deine Antwort, werde sie vielleicht irgendwann mal brauchen.
Zum 2.Teil: Ja, genauso soll es aussehen. Die Anzahl der Möglichkeiten sind dann n! (n Fakultät), bei 8 Buchstaben 40320 Kombinationen.
Ich zwing dich zu nichts, nur wenn es Spass macht.
Wolfgang

von Karolus » Sa, 02.06.2007 23:01

Hallo
geht aber nicht, weil die Möglichkeiten von ca 17 Mio die maximal mögliche Anzahl der Zeilen von Calc sprengen.
schreib die Kombi in je eine Zelle, führe einen Platzhalter für den Spaltenindex ein, und erhöhe diesen um 1 bei n = 65000 und setze n wieder auf 0 - dann passts rein -notfalls kann du auch bis zu 256 Tabellenblätter vollschreiben-
:D
Jeder Buchstabe darf also nur einmal auftauchen.
Du meinst im Prinzip: (mit 3 Buchstaben)
abc , acb , bac , bca , cba , cab
Das bereitet mir etwas Kopfzerbrechen, da muss ich (mindestens)eine Nacht drüber schlafen.

Gruß Karo

Fortsetzung

von matlat » Sa, 02.06.2007 22:07

Hallo zusammen
ich möcht mich mal an dieses Makro dranhängen und habe es aufgemotzt, so dass ich sogar die Komabinationen von 8 Merkmalen erzeugen könnte, geht aber nicht, weil die Möglichkeiten von ca 17 Mio die maximal mögliche Anzahl der Zeilen von Calc sprengen.
Allerdings habe ich ein etwas anderes Problem:
Ich möchte die Kombinationen von 8 vorgegebenen Buchstaben haben, die durch unterschiedliche Anordnung jeweils neue Wörter ergeben.
Jeder Buchstabe darf also nur einmal auftauchen.
Dadurch kommen ca 40 000 Kombinationen zustande. Calc schafft das.
Wird das ein völlig neues Makro oder kann man das oben stehende etwas abändern?
Bin schon auf eine Antwort gespannt.
Wolfgang

von Ontario » Sa, 02.06.2007 16:08

Ich danke dir. Das war super.

Viele Grüße

von Karolus » Fr, 01.06.2007 15:53

Hallo

Für eine Quelltabelle (hier die erste Tabelle) die so aufgebaut ist:
von A1 bis C3:
Audi|rot|100 PS
BMW|blau|150 PS
Opel| |200 PS

...gibt folgendes Makro die Kombinationen in die zweite Tabelle aus:

Code: Alles auswählen

Sub kombinationen2
Do
	quellea = thisComponent.sheets(0).getcellbyposition(0,a).string
	quelleb = thisComponent.sheets(0).getcellbyposition(1,b).string
	quellec = thisComponent.sheets(0).getcellbyposition(2,c).string

	thisComponent.sheets(1).getcellbyposition(0,n).string = quellea
	thisComponent.sheets(1).getcellbyposition(1,n).string = quelleb
	thisComponent.sheets(1).getcellbyposition(2,n).string = quellec
	n = n +1
	c = c + 1
	if thisComponent.sheets(0).getcellbyposition(2,c).string  = "" then 
	b = b + 1 : c = 0 : end if
	if thisComponent.sheets(0).getcellbyposition(1,b).string = "" then 
	a = a + 1 : b = 0 : end if
loop until thisComponent.sheets(0).getcellbyposition(0,a).string  = ""
End Sub
Gruß Karo

von Ontario » Fr, 01.06.2007 11:47

Vielen Dank!
Das ist sensationell und funktioniert super.

Gibt es die Möglichkeit, die Werte (Audi, BMW, Opel - rot, blau - 100PS, 200PS, 150PS) aus einer Tabelle auslesen zu lassen?

Es geht mir darum, dass ich die Art und Anzahl der Werte ändern kann (z.B. für Drucker:
10Seiten/min|20Seiten/min - 2JahreGarantie|1JahrGarantie|3JahreGarantie|4JahreGarantie - Farbe|schwarzweiß - groß|klein|mittel)

dann läuft das Makro drüber und generiert die Tabelle.

von Gert Seler » Fr, 01.06.2007 10:15

Danke Karo,
hat mir auch sehr geholfen, da ich mit "Basic" noch sehr viel
üben muß.

mfg
Gert

von Karolus » Fr, 01.06.2007 05:29

Hallo

Lass mal folgendes Makro in einem neuen Calc-dokument laufen:

Code: Alles auswählen

Sub kombinationen
'Schreibt alle Kombinationsmöglichkeiten der folgenden Arrayeinträge
'in eine Tabelle 
M = array("Audi","BMW","Opel")
F = array("rot","blau")
L = array("100 PS","150 PS","200 PS")
'k = Anzahl der Kombinationen
k = (ubound(M())+1)*(ubound(F())+1)*(ubound(L())+1)

for n = 0 to k-1
' 1.Tabelle.A1:Ck
	thisComponent.sheets(0).getcellbyposition(0,n).setstring(M(a))
	thisComponent.sheets(0).getcellbyposition(1,n).setstring(F(b))
	thisComponent.sheets(0).getcellbyposition(2,n).setstring(L(c))
	c = c + 1
	if c > ubound(L()) then : b = b+1 : c = 0 : end if
	if b > ubound(F()) then : a = a + 1 : b = 0 : end if
next n
End Sub
Gruß Karo

von Ontario » Do, 31.05.2007 17:42

Hallo,

ja, ich möchte eine derartige Tabelle erstellen. Das mit den Autos war nur ein Beispiel, um das Problem zu verdeutlichen.

Es geht letzendlich um eine Conjoint-Analyse, was hier aber keine Rolle spielt. Der Nutzen aller Möglichkeiten wird durch diese Analyse bestimmbar: So dass dann herauskommt, dass ein Audi,rot,200PS einen höheren Nutzen als ein Audi,rot,100PS hat. Aber das ist hier völlig egal. Ich brauche eine Möglichkeit, erstmal eine Tabelle mit allen Möglichkeiten zu erzeugen.

Angenommen es stehen die möglichen
Marken in Spalte 1: Audi|Opel|BMW
Farben in Spalte 2: rot|blau
Leistung in Spalte 3: 100PS|150PS|200PS

Wie kann ich nun eine o.g. Tabelle erzeugen?

Nur aus diesen Werten (Audi, BMW, Opel - rot, blau - 100PS, 200PS, 150PS) soll eine derartige Tabelle erstellt werden.

Nach oben